import { name, version } from '../package.json' assert { type: 'json' } const markers = ` ` export const plugin = { name, version, hooks: { preRender: (svg) => { if (svg.defs.indexOf(markers) === -1) svg.defs += markers }, }, macros: { cutonfold: function (so) { const { points, complete } = this.shorthand() if (so === false) { delete this.points.cutonfoldFrom delete this.points.cutonfoldTo delete this.points.cutonfoldVia1 delete this.points.cutonfoldVia2 delete this.paths.cutonfold this.setCutOnFold(false) // Restore default return true } so = { offset: 15, margin: 5, prefix: '', ...so, } this.setCutOnFold(so.from, so.to) if (so.grainline) this.setGrain(so.from.angle(so.to)) if (complete) { points['cutonfoldFrom' + so.prefix] = so.from.shiftFractionTowards(so.to, so.margin / 100) points['cutonfoldTo' + so.prefix] = so.to.shiftFractionTowards(so.from, so.margin / 100) points['cutonfoldVia1' + so.prefix] = points['cutonfoldFrom' + so.prefix] .shiftTowards(so.from, so.offset * this.context.settings.scale) .rotate(-90, points['cutonfoldFrom' + so.prefix]) points['cutonfoldVia2' + so.prefix] = points['cutonfoldTo' + so.prefix] .shiftTowards(so.to, so.offset * this.context.settings.scale) .rotate(90, points['cutonfoldTo' + so.prefix]) const text = so.grainline ? 'cutOnFoldAndGrainline' : 'cutOnFold' this.paths['cutonfold' + so.prefix] = new this.Path() .move(points['cutonfoldFrom' + so.prefix]) .line(points['cutonfoldVia1' + so.prefix]) .line(points['cutonfoldVia2' + so.prefix]) .line(points['cutonfoldTo' + so.prefix]) .attr('class', 'note') .attr('marker-start', 'url(#cutonfoldFrom)') .attr('marker-end', 'url(#cutonfoldTo)') .attr('data-text', text) .attr('data-text-class', 'center fill-note') } }, }, } // More specifically named exports export const cutonfoldPlugin = plugin export const pluginCutonfold = plugin