From 17b19412b45159c075b828a32b0e965d36d6448c Mon Sep 17 00:00:00 2001 From: be5invis Date: Mon, 11 Dec 2017 16:51:15 +0800 Subject: [PATCH] Update generator.regulate --- generator.js | 63 ++++++++++++++++++++++++---------------------------- 1 file changed, 29 insertions(+), 34 deletions(-) diff --git a/generator.js b/generator.js index df8fa4298..6d760538f 100644 --- a/generator.js +++ b/generator.js @@ -160,44 +160,39 @@ if (argv.o) { autoref(font.glyf); // regulate font.glyf.forEach(g => { - if (g.contours) { - for (var k = 0; k < g.contours.length; k++) { - var contour = g.contours[k]; - for (var p = 0; p < contour.length; p++) { - contour[p].x += contour[p].y * skew; - if (contour[p].on) { - contour[p].x = Math.round(contour[p].x); - } - } - var offJ = null, - mx = null; - for (var p = 0; p < contour.length; p++) { - if (contour[p].on) { - if (offJ) { - var origx = contour[p].x; - var rx = Math.round(contour[p].x * 4) / 4; - var origx0 = mx; - var rx0 = contour[offJ - 1].x; - if (origx != origx0) { - for (var poff = offJ; poff < p; poff++) { - contour[poff].x = - (contour[poff].x - origx0) / (origx - origx0) * (rx - rx0) + - rx0; - } - } - } - mx = contour[p].x; - contour[p].x = Math.round(contour[p].x * 4) / 4; - offJ = p + 1; + if (!g.contours) return; + for (var k = 0; k < g.contours.length; k++) { + var contour = g.contours[k]; + for (var p = 0; p < contour.length; p++) { + contour[p].x += contour[p].y * skew; + if (!contour[p].on) continue; + contour[p].x = Math.round(contour[p].x); + } + var offJ = null, + mx = null; + for (var p = 0; p < contour.length; p++) { + if (!contour[p].on) continue; + if (offJ) { + var origx = contour[p].x; + var rx = Math.round(contour[p].x * 4) / 4; + var origx0 = mx; + var rx0 = contour[offJ - 1].x; + if (origx === origx0) continue; + for (var poff = offJ; poff < p; poff++) { + contour[poff].x = + (contour[poff].x - origx0) / (origx - origx0) * (rx - rx0) + rx0; } } + mx = contour[p].x; + contour[p].x = Math.round(contour[p].x * 4) / 4; + offJ = p + 1; } - var c1 = []; - for (var k = 0; k < g.contours.length; k++) { - c1.push(Glyph.contourToStandardCubic(g.contours[k])); - } - g.contours = c1; } + var c1 = []; + for (var k = 0; k < g.contours.length; k++) { + c1.push(Glyph.contourToStandardCubic(g.contours[k])); + } + g.contours = c1; }); // overlap removal font.glyf.forEach(g => {