UNPKG

abcjs

Version:

Renderer for abc music notation

32 lines (28 loc) 1.33 kB
// abc_create_key_signature.js var AbsoluteElement = require('./elements/absolute-element'); var glyphs = require('./glyphs'); var RelativeElement = require('./elements/relative-element'); var createKeySignature = function (elem, tuneNumber) { elem.el_type = "keySignature"; if (!elem.accidentals || elem.accidentals.length === 0) return null; var abselem = new AbsoluteElement(elem, 0, 10, 'staff-extra key-signature', tuneNumber); abselem.isKeySig = true; var dx = 0; elem.accidentals.forEach(function (acc) { var symbol; var fudge = 0; switch (acc.acc) { case "sharp": symbol = "accidentals.sharp"; fudge = -3; break; case "natural": symbol = "accidentals.nat"; break; case "flat": symbol = "accidentals.flat"; fudge = -1.2; break; case "quartersharp": symbol = "accidentals.halfsharp"; fudge = -2.5; break; case "quarterflat": symbol = "accidentals.halfflat"; fudge = -1.2; break; default: symbol = "accidentals.flat"; } abselem.addRight(new RelativeElement(symbol, dx, glyphs.getSymbolWidth(symbol), acc.verticalPos, { thickness: glyphs.symbolHeightInPitches(symbol), top: acc.verticalPos + glyphs.symbolHeightInPitches(symbol) + fudge, bottom: acc.verticalPos + fudge })); dx += glyphs.getSymbolWidth(symbol) + 2; }, this); return abselem; }; module.exports = createKeySignature;