@knowvah/dot-engine 2.6.12 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/api.js +18 -4
- package/dist/api.js.map +3 -3
- package/dist/common/attr-get.d.ts +30 -0
- package/dist/common/attr-get.d.ts.map +1 -0
- package/dist/common/htmltable-emit-fill.d.ts +20 -2
- package/dist/common/htmltable-emit-fill.d.ts.map +1 -1
- package/dist/common/htmltable-emit.d.ts.map +1 -1
- package/dist/common/htmltable-lex-expat.d.ts.map +1 -1
- package/dist/common/htmltable-pos-runs.d.ts +7 -4
- package/dist/common/htmltable-pos-runs.d.ts.map +1 -1
- package/dist/common/htmltable.d.ts.map +1 -1
- package/dist/common/libm-trig.d.ts +5 -0
- package/dist/common/libm-trig.d.ts.map +1 -0
- package/dist/common/make-label.d.ts.map +1 -1
- package/dist/common/multicolor.d.ts +21 -13
- package/dist/common/multicolor.d.ts.map +1 -1
- package/dist/common/poly-gencode.d.ts +1 -2
- package/dist/common/poly-gencode.d.ts.map +1 -1
- package/dist/common/poly-init.d.ts +2 -12
- package/dist/common/poly-init.d.ts.map +1 -1
- package/dist/common/splines-clip.d.ts +7 -0
- package/dist/common/splines-clip.d.ts.map +1 -1
- package/dist/gvc/context.d.ts +6 -0
- package/dist/gvc/context.d.ts.map +1 -1
- package/dist/gvc/device-cluster.d.ts +15 -0
- package/dist/gvc/device-cluster.d.ts.map +1 -1
- package/dist/gvc/device.d.ts.map +1 -1
- package/dist/gvc/first-layer.d.ts +9 -0
- package/dist/gvc/first-layer.d.ts.map +1 -0
- package/dist/gvc/gvrender-set-style.d.ts +28 -0
- package/dist/gvc/gvrender-set-style.d.ts.map +1 -0
- package/dist/gvc/usershape.d.ts +18 -0
- package/dist/gvc/usershape.d.ts.map +1 -1
- package/dist/index.js +2478 -912
- package/dist/index.js.map +4 -4
- package/dist/layout/dot/compound.d.ts.map +1 -1
- package/dist/layout/dot/edge-route-clip.d.ts +14 -4
- package/dist/layout/dot/edge-route-clip.d.ts.map +1 -1
- package/dist/layout/dot/edge-route-routing.d.ts.map +1 -1
- package/dist/layout/dot/graph-label.d.ts.map +1 -1
- package/dist/layout/neato/__fixtures__/dijkstra-f.d.ts +11 -0
- package/dist/layout/neato/__fixtures__/dijkstra-f.d.ts.map +1 -0
- package/dist/layout/neato/__fixtures__/hier-imds.d.ts +36 -0
- package/dist/layout/neato/__fixtures__/hier-imds.d.ts.map +1 -0
- package/dist/layout/neato/__fixtures__/hier-majorization.d.ts +32 -0
- package/dist/layout/neato/__fixtures__/hier-majorization.d.ts.map +1 -0
- package/dist/layout/neato/cdt-surface.d.ts.map +1 -1
- package/dist/layout/neato/compute-hierarchy.d.ts +24 -0
- package/dist/layout/neato/compute-hierarchy.d.ts.map +1 -0
- package/dist/layout/neato/conjgrad-mkernel.d.ts +20 -0
- package/dist/layout/neato/conjgrad-mkernel.d.ts.map +1 -0
- package/dist/layout/neato/conjgrad.d.ts +19 -0
- package/dist/layout/neato/conjgrad.d.ts.map +1 -1
- package/dist/layout/neato/constrained-majorization.d.ts +26 -0
- package/dist/layout/neato/constrained-majorization.d.ts.map +1 -0
- package/dist/layout/neato/dijkstra.d.ts +33 -16
- package/dist/layout/neato/dijkstra.d.ts.map +1 -1
- package/dist/layout/neato/gts-triangle.d.ts +14 -0
- package/dist/layout/neato/gts-triangle.d.ts.map +1 -0
- package/dist/layout/neato/init.d.ts +2 -12
- package/dist/layout/neato/init.d.ts.map +1 -1
- package/dist/layout/neato/kkutils.d.ts +20 -0
- package/dist/layout/neato/kkutils.d.ts.map +1 -0
- package/dist/layout/neato/make-graph-data.d.ts +43 -0
- package/dist/layout/neato/make-graph-data.d.ts.map +1 -0
- package/dist/layout/neato/matrix-ops.d.ts +46 -0
- package/dist/layout/neato/matrix-ops.d.ts.map +1 -1
- package/dist/layout/neato/opt-arrangement.d.ts +20 -0
- package/dist/layout/neato/opt-arrangement.d.ts.map +1 -0
- package/dist/layout/neato/quad-prog-solve.d.ts +44 -0
- package/dist/layout/neato/quad-prog-solve.d.ts.map +1 -0
- package/dist/layout/neato/smart-ini-x.d.ts +9 -0
- package/dist/layout/neato/smart-ini-x.d.ts.map +1 -0
- package/dist/layout/neato/splines.d.ts +1 -1
- package/dist/layout/neato/splines.d.ts.map +1 -1
- package/dist/layout/neato/start.d.ts +4 -1
- package/dist/layout/neato/start.d.ts.map +1 -1
- package/dist/layout/neato/stress.d.ts +8 -0
- package/dist/layout/neato/stress.d.ts.map +1 -1
- package/dist/model/edge.d.ts +1 -1
- package/dist/model/edge.d.ts.map +1 -1
- package/dist/model/lazy-attrs.d.ts +10 -0
- package/dist/model/lazy-attrs.d.ts.map +1 -0
- package/dist/model/node.d.ts +1 -1
- package/dist/model/node.d.ts.map +1 -1
- package/dist/ortho/index.d.ts.map +1 -1
- package/dist/render/dot/edge-draw.d.ts +1 -1
- package/dist/render/dot/edge-draw.d.ts.map +1 -1
- package/dist/render/svg-multicolor.d.ts +2 -2
- package/dist/render/svg-multicolor.d.ts.map +1 -1
- package/dist/render.js +2358 -792
- package/dist/render.js.map +4 -4
- package/package.json +1 -1
- package/src/common/attr-get.ts +46 -0
- package/src/common/graph-init.ts +1 -1
- package/src/common/htmltable-emit-fill.ts +56 -11
- package/src/common/htmltable-emit.ts +4 -3
- package/src/common/htmltable-lex-expat.ts +21 -3
- package/src/common/htmltable-pos-runs.ts +11 -6
- package/src/common/htmltable.ts +28 -116
- package/src/common/libm-trig.ts +43 -0
- package/src/common/make-label.ts +14 -2
- package/src/common/multicolor.ts +88 -24
- package/src/common/poly-gencode.ts +16 -8
- package/src/common/poly-init.ts +23 -19
- package/src/common/postproc.ts +2 -2
- package/src/common/splines-clip.ts +15 -12
- package/src/common/splines-routespl.ts +2 -2
- package/src/common/textmeasure-lookup.ts +1 -1
- package/src/gvc/context.ts +8 -0
- package/src/gvc/device-cluster.ts +63 -8
- package/src/gvc/device.ts +16 -2
- package/src/gvc/first-layer.ts +26 -0
- package/src/gvc/gvrender-set-style.ts +114 -0
- package/src/gvc/usershape.ts +26 -0
- package/src/layout/dot/cluster.ts +1 -1
- package/src/layout/dot/compound.ts +3 -4
- package/src/layout/dot/conc.ts +1 -1
- package/src/layout/dot/edge-route-clip.ts +19 -7
- package/src/layout/dot/edge-route-routing.ts +11 -3
- package/src/layout/dot/fastgr.ts +2 -2
- package/src/layout/dot/graph-label.ts +1 -15
- package/src/layout/neato/__fixtures__/dijkstra-f.ts +17 -0
- package/src/layout/neato/__fixtures__/hier/c1554.gv +33 -0
- package/src/layout/neato/__fixtures__/hier/c1554.plain +26 -0
- package/src/layout/neato/__fixtures__/hier/c1554.xdot +161 -0
- package/src/layout/neato/__fixtures__/hier/cases/cycle.gv +1 -0
- package/src/layout/neato/__fixtures__/hier/cases/cycle.plain +10 -0
- package/src/layout/neato/__fixtures__/hier/cases/cycle.stderr +0 -0
- package/src/layout/neato/__fixtures__/hier/cases/dirnone.gv +1 -0
- package/src/layout/neato/__fixtures__/hier/cases/dirnone.plain +11 -0
- package/src/layout/neato/__fixtures__/hier/cases/dirnone.stderr +0 -0
- package/src/layout/neato/__fixtures__/hier/cases/epsilon.gv +1 -0
- package/src/layout/neato/__fixtures__/hier/cases/epsilon.plain +13 -0
- package/src/layout/neato/__fixtures__/hier/cases/epsilon.stderr +0 -0
- package/src/layout/neato/__fixtures__/hier/cases/levelsgap.gv +1 -0
- package/src/layout/neato/__fixtures__/hier/cases/levelsgap.plain +8 -0
- package/src/layout/neato/__fixtures__/hier/cases/levelsgap.stderr +0 -0
- package/src/layout/neato/__fixtures__/hier/cases/mds.gv +1 -0
- package/src/layout/neato/__fixtures__/hier/cases/mds.plain +10 -0
- package/src/layout/neato/__fixtures__/hier/cases/mds.stderr +0 -0
- package/src/layout/neato/__fixtures__/hier/cases/multiedge.gv +1 -0
- package/src/layout/neato/__fixtures__/hier/cases/multiedge.plain +10 -0
- package/src/layout/neato/__fixtures__/hier/cases/multiedge.stderr +0 -0
- package/src/layout/neato/__fixtures__/hier/cases/neglevelsgap.gv +1 -0
- package/src/layout/neato/__fixtures__/hier/cases/neglevelsgap.plain +8 -0
- package/src/layout/neato/__fixtures__/hier/cases/neglevelsgap.stderr +0 -0
- package/src/layout/neato/__fixtures__/hier/cases/startrandom.gv +1 -0
- package/src/layout/neato/__fixtures__/hier/cases/startrandom.plain +10 -0
- package/src/layout/neato/__fixtures__/hier/cases/startrandom.stderr +0 -0
- package/src/layout/neato/__fixtures__/hier/cases/startregular.gv +1 -0
- package/src/layout/neato/__fixtures__/hier/cases/startregular.plain +10 -0
- package/src/layout/neato/__fixtures__/hier/cases/startregular.stderr +0 -0
- package/src/layout/neato/__fixtures__/hier/cases/tdist.gv +1 -0
- package/src/layout/neato/__fixtures__/hier/cases/tdist.plain +13 -0
- package/src/layout/neato/__fixtures__/hier/cases/tdist.stderr +0 -0
- package/src/layout/neato/__fixtures__/hier/cases/undirected.gv +1 -0
- package/src/layout/neato/__fixtures__/hier/cases/undirected.plain +10 -0
- package/src/layout/neato/__fixtures__/hier/cases/undirected.stderr +0 -0
- package/src/layout/neato/__fixtures__/hier/hier-probe.gv +1 -0
- package/src/layout/neato/__fixtures__/hier/hier-probe.plain +16 -0
- package/src/layout/neato/__fixtures__/hier/hier-probe.xdot +62 -0
- package/src/layout/neato/__fixtures__/hier-imds.ts +151 -0
- package/src/layout/neato/__fixtures__/hier-majorization.ts +145 -0
- package/src/layout/neato/cdt-surface.ts +6 -16
- package/src/layout/neato/compute-hierarchy.ts +90 -0
- package/src/layout/neato/conjgrad-mkernel.ts +141 -0
- package/src/layout/neato/conjgrad.ts +208 -0
- package/src/layout/neato/constrained-majorization.ts +479 -0
- package/src/layout/neato/dijkstra.ts +218 -92
- package/src/layout/neato/edge-len.ts +2 -2
- package/src/layout/neato/fdp-adjust.ts +3 -3
- package/src/layout/neato/gts-triangle.ts +42 -0
- package/src/layout/neato/init.ts +57 -57
- package/src/layout/neato/kk.ts +2 -2
- package/src/layout/neato/kkutils.ts +96 -0
- package/src/layout/neato/make-graph-data.ts +166 -0
- package/src/layout/neato/matrix-ops.ts +138 -0
- package/src/layout/neato/opt-arrangement.ts +86 -0
- package/src/layout/neato/quad-prog-solve.ts +489 -0
- package/src/layout/neato/smart-ini-x.ts +503 -0
- package/src/layout/neato/splines.ts +4 -4
- package/src/layout/neato/start.ts +7 -6
- package/src/layout/neato/stress.ts +28 -0
- package/src/model/edge.ts +3 -2
- package/src/model/lazy-attrs.ts +36 -0
- package/src/model/node.ts +3 -2
- package/src/ortho/index.ts +2 -3
- package/src/parser/dot.js +1 -1
- package/src/parser/dot.pegjs +1 -1
- package/src/parser/index.ts +1 -1
- package/src/render/color-resolve.ts +2 -2
- package/src/render/dot/edge-draw.ts +6 -3
- package/src/render/dot.ts +1 -1
- package/src/render/svg-edge-split.ts +2 -2
- package/src/render/svg-multicolor.ts +4 -3
- package/src/render/svg-parallel-edge.ts +2 -2
package/src/parser/dot.js
CHANGED
|
@@ -289,7 +289,7 @@ function peg$parse(input, options) {
|
|
|
289
289
|
function peg$f13(t, m, attrs) {
|
|
290
290
|
// grammar.y:attrstmt calls nomacros() when a macro name is present;
|
|
291
291
|
// the attributes are still applied unchanged.
|
|
292
|
-
if (m) agwarningf("attribute macros not implemented"
|
|
292
|
+
if (m) agwarningf("attribute macros not implemented");
|
|
293
293
|
return { type: "attr", target: t, attrs: attrs };
|
|
294
294
|
}
|
|
295
295
|
function peg$f14(a) { return { type: "assign", key: a.key, value: a.value }; }
|
package/src/parser/dot.pegjs
CHANGED
|
@@ -75,7 +75,7 @@ AttrStmt
|
|
|
75
75
|
{
|
|
76
76
|
// grammar.y:attrstmt calls nomacros() when a macro name is present;
|
|
77
77
|
// the attributes are still applied unchanged.
|
|
78
|
-
if (m) agwarningf("attribute macros not implemented"
|
|
78
|
+
if (m) agwarningf("attribute macros not implemented");
|
|
79
79
|
return { type: "attr", target: t, attrs: attrs };
|
|
80
80
|
}
|
|
81
81
|
/ a:AttrAssignment
|
package/src/parser/index.ts
CHANGED
|
@@ -234,7 +234,7 @@ export function isPeggyError(err: unknown): err is {
|
|
|
234
234
|
function warnNumberAmbiguities(src: string, upTo: number): void {
|
|
235
235
|
for (const a of scanNumberAmbiguities(src, Stripper.strip(src))) {
|
|
236
236
|
if (a.offset > upTo) break;
|
|
237
|
-
agerrFinished(numberAmbiguityMessage(a)
|
|
237
|
+
agerrFinished(numberAmbiguityMessage(a));
|
|
238
238
|
}
|
|
239
239
|
}
|
|
240
240
|
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
import type { Edge } from '../model/edge.js';
|
|
27
27
|
import { registerRenderState } from '../common/render-state.js';
|
|
28
28
|
import { agerrorf, agwarningf } from '../common/agerr.js';
|
|
29
|
-
import {
|
|
29
|
+
import { parseSegsSilent } from '../common/multicolor.js';
|
|
30
30
|
import { findStopColor, styleTokens } from '../common/style-resolve.js';
|
|
31
31
|
import { emitOnce } from '../common/emit-once.js';
|
|
32
32
|
|
|
@@ -282,7 +282,7 @@ function multicolorNames(
|
|
|
282
282
|
color: string,
|
|
283
283
|
arrows: readonly EdgeArrowFlags[],
|
|
284
284
|
): string[] | null {
|
|
285
|
-
const { segs, error } =
|
|
285
|
+
const { segs, error } = parseSegsSilent(color);
|
|
286
286
|
if (error === 1 || error === 2) return null;
|
|
287
287
|
const out: string[] = [];
|
|
288
288
|
const front = segs[0]?.color ?? null;
|
|
@@ -23,11 +23,12 @@ import { resolveRenderColor } from '../color-resolve.js';
|
|
|
23
23
|
import { taper, taperfun } from '../../common/taper.js';
|
|
24
24
|
import { orthoRoundedRadius } from '../svg-helpers.js';
|
|
25
25
|
import { orthoRoundedPolylines } from '../svg-edge-ortho-radius.js';
|
|
26
|
-
import { parseSegs } from '../../common/multicolor.js';
|
|
26
|
+
import { edgeSegsContext, parseSegs, parseSegsSilent } from '../../common/multicolor.js';
|
|
27
27
|
import { splitSplineByColor } from '../svg-edge-split.js';
|
|
28
28
|
import { buildOffsetLists, advanceTmpList } from '../../common/edge-offset.js';
|
|
29
29
|
import { xdotFillColor, xdotNum, xdotPenColor, xdotPoint, xdotPoints, xdotStrOp, trimFixed3 } from './xdot-ops.js';
|
|
30
30
|
import { DotWriterBase } from './agwrite.js';
|
|
31
|
+
import { gvrenderSetStyle } from '../../gvc/gvrender-set-style.js';
|
|
31
32
|
|
|
32
33
|
/** Pen colour when a colour-list entry is empty. @see lib/common/emit.c:2485 */
|
|
33
34
|
const DEFAULT_COLOR = 'black';
|
|
@@ -81,6 +82,7 @@ export abstract class EdgeDrawBase extends DotWriterBase {
|
|
|
81
82
|
*/
|
|
82
83
|
attachmentPolyline(pts: Point[], pencolor: string, job: RenderJob): void {
|
|
83
84
|
const obj = job.obj;
|
|
85
|
+
gvrenderSetStyle(DEFAULT_LINE_STYLE);
|
|
84
86
|
if (obj !== null) {
|
|
85
87
|
obj.rawStyle = [...DEFAULT_LINE_STYLE];
|
|
86
88
|
obj.pen = PenType.Solid;
|
|
@@ -147,11 +149,12 @@ export abstract class EdgeDrawBase extends DotWriterBase {
|
|
|
147
149
|
*/
|
|
148
150
|
protected emitSplitSpline(
|
|
149
151
|
bzList: (Bezier | undefined)[],
|
|
152
|
+
e: Edge,
|
|
150
153
|
colorAttr: string,
|
|
151
154
|
edraw: string[],
|
|
152
155
|
job: RenderJob,
|
|
153
156
|
): { firstColor: string; endColor: string } {
|
|
154
|
-
const segs = parseSegs(colorAttr).segs;
|
|
157
|
+
const segs = parseSegs(colorAttr, edgeSegsContext(e)).segs;
|
|
155
158
|
const firstColor = segs[0]?.color ?? DEFAULT_COLOR;
|
|
156
159
|
let endColor = firstColor;
|
|
157
160
|
for (const bz of bzList) {
|
|
@@ -183,7 +186,7 @@ export abstract class EdgeDrawBase extends DotWriterBase {
|
|
|
183
186
|
? buildOffsetLists(bz.list, (2 + numc) / 2)
|
|
184
187
|
: { offlist: [] as Point[], tmplist: [] as Point[] },
|
|
185
188
|
);
|
|
186
|
-
const colors =
|
|
189
|
+
const colors = parseSegsSilent(colorAttr).segs.map((s) => s.color ?? DEFAULT_COLOR);
|
|
187
190
|
for (const color of colors) {
|
|
188
191
|
const pen = xdotPenColor(resolveRenderColor(color));
|
|
189
192
|
for (const sd of segData) {
|
package/src/render/dot.ts
CHANGED
|
@@ -215,7 +215,7 @@ export class XdotRenderer extends EdgeDrawBase implements RendererPlugin {
|
|
|
215
215
|
// color segment, split along the spline's arc length. Takes precedence
|
|
216
216
|
// over tapered / `:` parallel, matching C's `if (numsemi && numc)` order.
|
|
217
217
|
// @see lib/common/emit.c:2389 multicolor
|
|
218
|
-
const c = this.emitSplitSpline(spl.list as (Bezier | undefined)[], colorAttr, edraw, job);
|
|
218
|
+
const c = this.emitSplitSpline(spl.list as (Bezier | undefined)[], e, colorAttr, edraw, job);
|
|
219
219
|
tailArrowColor = c.firstColor;
|
|
220
220
|
headArrowColor = c.endColor;
|
|
221
221
|
} else if (edgeIsTapered(e)) {
|
|
@@ -21,7 +21,7 @@ import type { RenderJob } from '../gvc/job.js';
|
|
|
21
21
|
import type { Point, Bezier } from '../model/geom.js';
|
|
22
22
|
import { bezier } from '../common/bezier.js';
|
|
23
23
|
import { dist2 } from '../common/spline-midpoint.js';
|
|
24
|
-
import { parseSegs } from '../common/multicolor.js';
|
|
24
|
+
import { edgeSegsContext, parseSegs } from '../common/multicolor.js';
|
|
25
25
|
import { transformPoint } from '../gvc/device.js';
|
|
26
26
|
import { emitBezierPath, emitDash, emitPenWidth } from './svg-helpers.js';
|
|
27
27
|
import { resolveRenderColor, colorPaint } from './color-resolve.js';
|
|
@@ -160,7 +160,7 @@ export function emitSplitEdgePaths(
|
|
|
160
160
|
job: RenderJob,
|
|
161
161
|
colorList: string,
|
|
162
162
|
): { firstColor: string; endColor: string } {
|
|
163
|
-
const segs = parseSegs(colorList).segs;
|
|
163
|
+
const segs = parseSegs(colorList, edgeSegsContext(e)).segs;
|
|
164
164
|
const firstColor = segs[0]?.color ?? DEFAULT_COLOR;
|
|
165
165
|
const spl = e.info.spl;
|
|
166
166
|
let endColor = firstColor;
|
|
@@ -231,8 +231,9 @@ function drawWedge(seg: WedgeSeg, e: EllipseParams, ctx: RenderCtx): number {
|
|
|
231
231
|
*/
|
|
232
232
|
export function wedgedEllipse(
|
|
233
233
|
job: RenderJob, pf: Point[], clrs: string, renderer: RendererPlugin,
|
|
234
|
+
context?: () => string,
|
|
234
235
|
): number {
|
|
235
|
-
const { segs, error } = parseSegs(clrs);
|
|
236
|
+
const { segs, error } = parseSegs(clrs, context);
|
|
236
237
|
if (error === 1 || error === 2) return error;
|
|
237
238
|
const ctrX = (pf[0]!.x + pf[1]!.x) / 2;
|
|
238
239
|
const ctrY = (pf[0]!.y + pf[1]!.y) / 2;
|
|
@@ -286,9 +287,9 @@ function drawBand(p: Point[], seg: BandSeg, ctx: RenderCtx): void {
|
|
|
286
287
|
*/
|
|
287
288
|
export function stripedBox(
|
|
288
289
|
job: RenderJob, pts: Point[], clrs: string,
|
|
289
|
-
rotate: boolean, renderer: RendererPlugin,
|
|
290
|
+
rotate: boolean, renderer: RendererPlugin, context?: () => string,
|
|
290
291
|
): number {
|
|
291
|
-
const { segs, error } = parseSegs(clrs);
|
|
292
|
+
const { segs, error } = parseSegs(clrs, context);
|
|
292
293
|
if (error === 1 || error === 2) return error;
|
|
293
294
|
// @see lib/common/emit.c:605-615 rotate swap
|
|
294
295
|
const p: Point[] = rotate
|
|
@@ -27,7 +27,7 @@ import { buildOffsetLists, advanceTmpList } from '../common/edge-offset.js';
|
|
|
27
27
|
import { transformPoint } from '../gvc/device.js';
|
|
28
28
|
import { emitBezierPath, emitDash, emitPenWidth } from './svg-helpers.js';
|
|
29
29
|
import { resolveRenderColor, colorPaint, colorOpacity } from './color-resolve.js';
|
|
30
|
-
import {
|
|
30
|
+
import { parseSegsSilent } from '../common/multicolor.js';
|
|
31
31
|
|
|
32
32
|
const PENWIDTH_NORMAL = 1.0;
|
|
33
33
|
const PENWIDTH_THRESHOLD = 0.005;
|
|
@@ -114,7 +114,7 @@ export function emitParallelEdgePaths(
|
|
|
114
114
|
// parseSegs strips any ';weight', so the semicolon syntax (which C routes
|
|
115
115
|
// to split-along-length multicolor — a follow-up) at least yields valid
|
|
116
116
|
// parallel colors instead of an invalid "red;0.5" stroke.
|
|
117
|
-
const colors =
|
|
117
|
+
const colors = parseSegsSilent(colorList).segs.map((s) => s.color ?? DEFAULT_COLOR);
|
|
118
118
|
emitColorPasses(segData, colors, job);
|
|
119
119
|
return {
|
|
120
120
|
headColor: colors[0] ?? DEFAULT_COLOR,
|