UNPKG

abcjs

Version:

Renderer for abc music notation

56 lines (51 loc) 3.19 kB
// abc_create_time_signature.js var AbsoluteElement = require('./elements/absolute-element'); var glyphs = require('./glyphs'); var RelativeElement = require('./elements/relative-element'); var createTimeSignature = function (elem, tuneNumber) { elem.el_type = "timeSignature"; var abselem = new AbsoluteElement(elem, 0, 10, 'staff-extra time-signature', tuneNumber); if (elem.type === "specified") { var x = 0; for (var i = 0; i < elem.value.length; i++) { if (i !== 0) { abselem.addRight(new RelativeElement('+', x + 1, glyphs.getSymbolWidth("+"), 6, { thickness: glyphs.symbolHeightInPitches("+") })); x += glyphs.getSymbolWidth("+") + 2; } if (elem.value[i].den) { var numWidth = 0; for (var i2 = 0; i2 < elem.value[i].num.length; i2++) numWidth += glyphs.getSymbolWidth(elem.value[i].num[i2]); var denWidth = 0; for (i2 = 0; i2 < elem.value[i].num.length; i2++) denWidth += glyphs.getSymbolWidth(elem.value[i].den[i2]); var maxWidth = Math.max(numWidth, denWidth); abselem.addRight(new RelativeElement(elem.value[i].num, x + (maxWidth - numWidth) / 2, numWidth, 8, { thickness: glyphs.symbolHeightInPitches(elem.value[i].num[0]) })); abselem.addRight(new RelativeElement(elem.value[i].den, x + (maxWidth - denWidth) / 2, denWidth, 4, { thickness: glyphs.symbolHeightInPitches(elem.value[i].den[0]) })); x += maxWidth } else { var thisWidth = 0; for (var i3 = 0; i3 < elem.value[i].num.length; i3++) thisWidth += glyphs.getSymbolWidth(elem.value[i].num[i3]); abselem.addRight(new RelativeElement(elem.value[i].num, x, thisWidth, 6, { thickness: glyphs.symbolHeightInPitches(elem.value[i].num[0]) })); x += thisWidth; } } } else if (elem.type === "common_time") { abselem.addRight(new RelativeElement("timesig.common", 0, glyphs.getSymbolWidth("timesig.common"), 6, { thickness: glyphs.symbolHeightInPitches("timesig.common") })); } else if (elem.type === "cut_time") { abselem.addRight(new RelativeElement("timesig.cut", 0, glyphs.getSymbolWidth("timesig.cut"), 6, { thickness: glyphs.symbolHeightInPitches("timesig.cut") })); } else if (elem.type === "tempus_imperfectum") { abselem.addRight(new RelativeElement("timesig.imperfectum", 0, glyphs.getSymbolWidth("timesig.imperfectum"), 6, { thickness: glyphs.symbolHeightInPitches("timesig.imperfectum") })); } else if (elem.type === "tempus_imperfectum_prolatio") { abselem.addRight(new RelativeElement("timesig.imperfectum2", 0, glyphs.getSymbolWidth("timesig.imperfectum2"), 6, { thickness: glyphs.symbolHeightInPitches("timesig.imperfectum2") })); } else if (elem.type === "tempus_perfectum") { abselem.addRight(new RelativeElement("timesig.perfectum", 0, glyphs.getSymbolWidth("timesig.perfectum"), 6, { thickness: glyphs.symbolHeightInPitches("timesig.perfectum") })); } else if (elem.type === "tempus_perfectum_prolatio") { abselem.addRight(new RelativeElement("timesig.perfectum2", 0, glyphs.getSymbolWidth("timesig.perfectum2"), 6, { thickness: glyphs.symbolHeightInPitches("timesig.perfectum2") })); } else { console.log("time signature:", elem); } return abselem; }; module.exports = createTimeSignature;