UNPKG

abcjs

Version:

Renderer for abc music notation

72 lines (65 loc) 2.2 kB
var roundNumber = require("./round-number"); function renderText(renderer, params, alreadyInGroup) { var y = params.y; if (params.lane) { var laneMargin = params.dim.font.size * 0.25; y += (params.dim.font.size + laneMargin) * params.lane; } var hash; if (params.dim) { hash = params.dim; hash.attr.class = params.klass; } else hash = renderer.controller.getFontAndAttr.calc(params.type, params.klass); if (params.anchor) hash.attr["text-anchor"] = params.anchor; hash.attr.x = params.x; hash.attr.y = y; if (!params.centerVertically) hash.attr.y += hash.font.size; if (params.type === 'debugfont') { console.log("Debug msg: " + params.text); hash.attr.stroke = "#ff0000"; } if (params.cursor) { hash.attr.cursor = params.cursor; } var text = params.text.replace(/\n\n/g, "\n \n"); text = text.replace(/^\n/, "\xA0\n"); if (hash.font.box) { if (!alreadyInGroup) renderer.paper.openGroup({ klass: hash.attr['class'], fill: renderer.foregroundColor, "data-name": params.name }); if (hash.attr["text-anchor"] === "end") { hash.attr.x -= hash.font.padding; } else if (hash.attr["text-anchor"] === "start") { hash.attr.x += hash.font.padding; } hash.attr.y += hash.font.padding; delete hash.attr['class']; } if (params.noClass) delete hash.attr['class']; hash.attr.x = roundNumber(hash.attr.x); hash.attr.y = roundNumber(hash.attr.y); if (params.name) hash.attr["data-name"] = params.name; var elem = renderer.paper.text(text, hash.attr); if (hash.font.box) { var size = elem.getBBox(); var delta = 0; if (hash.attr["text-anchor"] === "middle") { delta = size.width / 2 + hash.font.padding; } else if (hash.attr["text-anchor"] === "end") { delta = size.width + hash.font.padding * 2; } var deltaY = 0; if (params.centerVertically) { deltaY = size.height - hash.font.padding; } renderer.paper.rect({ "data-name": "box", x: Math.round(params.x - delta), y: Math.round(y - deltaY), width: Math.round(size.width + hash.font.padding * 2), height: Math.round(size.height + hash.font.padding * 2) }); if (!alreadyInGroup) elem = renderer.paper.closeGroup(); } return elem; } module.exports = renderText;