@stringsync/vexml
Version:
MusicXML to Vexflow
28 lines (27 loc) • 1.11 kB
JavaScript
import * as util from '../util';
import { DEFAULT_CONFIG } from '../config';
import { NoopLogger } from '../debug';
/**
* A formatter that limits the number of measures per system.
*/
export class MaxMeasureFormatter {
maxMeasuresPerSystemCount;
config;
log;
constructor(maxMeasuresPerSystemCount, opts) {
this.maxMeasuresPerSystemCount = maxMeasuresPerSystemCount;
this.config = { ...DEFAULT_CONFIG, ...opts?.config };
this.log = opts?.logger ?? new NoopLogger();
util.assert(maxMeasuresPerSystemCount > 0, 'maxMeasuresPerSystemCount must be greater than 0');
}
format(document) {
const clone = document.clone();
const measures = clone.score.systems.flatMap((system) => system.measures);
clone.score.systems = [];
for (let index = 0; index < measures.length; index += this.maxMeasuresPerSystemCount) {
const systemMeasures = measures.slice(index, index + this.maxMeasuresPerSystemCount);
clone.score.systems.push({ type: 'system', measures: systemMeasures });
}
return clone;
}
}