UNPKG

@stringsync/vexml

Version:

MusicXML to Vexflow

28 lines (27 loc) 1.11 kB
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; } }