Massively improved building stability; improved shapes of /eta.

This commit is contained in:
be5invis 2015-11-26 07:30:41 +08:00
parent 5115586fac
commit 50fdae2c96
16 changed files with 95 additions and 109 deletions

View File

@ -21,7 +21,7 @@ Quit your editor/program. Unzip and open the folder.
To build Iosevka you should: To build Iosevka you should:
1. Ensure that `node`, `FontForge`, `ttfautohint`, `ttx` and `make` are runnable in your terminal. 1. Ensure that `node`, `FontForge`, `ttfautohint`, `ttx` and `make` are runnable in your terminal.
2. Install the newest `patel-c` (≥ 0.21.0) by `npm install patel -g` 2. Install the newest `patel-c` (≥ 0.25.0) by `npm install patel -g`
3. Install necessary libs by `npm install` 3. Install necessary libs by `npm install`
4. `make`. 4. `make`.

View File

@ -1,12 +1,8 @@
define Glyph [require './support/glyph'].Glyph import './support/glyph' as Glyph
define Stroke [require './support/stroke'].Stroke import './support/stroke' as Stroke
define tp [require './support/transform'].transformPoint import './support/spirokit' as spirokit
define utp [require './support/transform'].untransform import './support/transform' as [object [transformPoint tp] [untransform utp] inverse]
define inverse [require './support/transform'].inverse import 'unorm' as unorm
define unorm [require 'unorm']
define spirokit [require './support/spirokit']
### File inclusion macro ### File inclusion macro
define-macro $$include : syntax-rules define-macro $$include : syntax-rules
@ -101,7 +97,7 @@ define [tagged tag fn] : lambda [] : begin
set this.defaultTag _tag set this.defaultTag _tag
return nothing return nothing
define [buildFont para recursive] : begin export as build : define [buildFont para recursive recursiveCodes] : begin
define variantSelector para.variantSelector define variantSelector para.variantSelector
define font this define font this
@ -427,6 +423,3 @@ define [buildFont para recursive] : begin
set font.glyfMap glyphs set font.glyfMap glyphs
return font return font
exports.build = buildFont

View File

@ -3,7 +3,7 @@ var TTFWriter = require('node-sfnt').TTFWriter;
var TTF = require('node-sfnt').TTF; var TTF = require('node-sfnt').TTF;
var argv = require('yargs').argv; var argv = require('yargs').argv;
var Glyph = require('./support/glyph').Glyph; var Glyph = require('./support/glyph');
function toBuffer(arrayBuffer) { function toBuffer(arrayBuffer) {
var length = arrayBuffer.byteLength; var length = arrayBuffer.byteLength;

View File

@ -116,6 +116,8 @@ define customDecompositions {
."\u21AE" "" ."\u21AE" ""
} }
define iotaBelowToLF : function [p] : if (p === glyphs.iotaBelow) glyphs.iotaLF p
define ogonekBelowToTR : function [p] : if (p === glyphs.ogonekBelow) glyphs.ogonekTR p
define [subParts parts] : begin define [subParts parts] : begin
local hasMarkAbove false local hasMarkAbove false
foreach p [items-of parts] : if [isAboveMark p] : set hasMarkAbove true foreach p [items-of parts] : if [isAboveMark p] : set hasMarkAbove true
@ -125,8 +127,8 @@ define [subParts parts] : begin
if (parts.0 === glyphs.j && hasMarkAbove) : parts.0 = glyphs.dotlessj if (parts.0 === glyphs.j && hasMarkAbove) : parts.0 = glyphs.dotlessj
# replace below marks with trailing marks # replace below marks with trailing marks
if parts.0.anchors.lf : set parts : parts.map : function [p] : if (p === glyphs.iotaBelow) glyphs.iotaLF p if parts.0.anchors.lf : set parts : parts.map iotaBelowToLF
if parts.0.anchors.trailing : set parts : parts.map : function [p] : if (p === glyphs.ogonekBelow) glyphs.ogonekTR p if parts.0.anchors.trailing : set parts : parts.map ogonekBelowToTR
# composite greek overmarks # composite greek overmarks
for [local j 0] (j < parts.length) [inc j] : piecewise for [local j 0] (j < parts.length) [inc j] : piecewise
@ -153,7 +155,7 @@ define [pad s n] : begin
return s return s
set font.features.ccmp {} #set font.features.ccmp {}
define [shorter x y] : if (x.length < y.length) x y define [shorter x y] : if (x.length < y.length) x y
define [decideName namingParts parts code] : begin define [decideName namingParts parts code] : begin
local baseName namingParts.0.name local baseName namingParts.0.name
@ -168,21 +170,30 @@ define [decideName namingParts parts code] : begin
let : begin let : begin
local nComposed 0 local nComposed 0
foreach code [range 0x0000 0xFFFF] : if [not unicodeGlyphs.(code)] : begin local foundDecompositions {}
local itsName : [part] -> part.name
local [buildForCode code] : if [not unicodeGlyphs.(code)] : begin
local str : String.fromCharCode code local str : String.fromCharCode code
local nfd : fallback customDecompositions.(str) : unorm.nfd str local nfd : fallback customDecompositions.(str) : unorm.nfd str
if (nfd.length > 1) : begin if (nfd.length > 1) : begin
local parts {} local parts {}
local allFound true local allFound true
foreach j [range 0 nfd.length] : begin foreach j [range 0 nfd.length] : begin
set parts.(j) unicodeGlyphs.([nfd.charCodeAt j]) local part unicodeGlyphs.([nfd.charCodeAt j])
if [not parts.(j)] : set allFound false if [not part] : then : set allFound false
: else : set parts.(j) unicodeGlyphs.([nfd.charCodeAt j])
if allFound : begin if allFound : begin
local namingParts : parts.slice 0 local namingParts : parts.slice 0
set parts : subParts parts set parts : subParts parts
local composition : namingParts.map ([part] -> part.name) :.join ' ' # local composition : namingParts.map itsName :.join ' '
local glyphName : decideName namingParts parts code local glyphName : decideName namingParts parts code
create-glyph glyphName : glyph-construction foundDecompositions.push {glyphName code parts}
inc nComposed
if recursiveCodes : recursiveCodes.forEach buildForCode
: else : foreach code [range 0x0000 0xFFFF] : buildForCode code
define construction : glyph-construction
assign-unicode code assign-unicode code
include parts.0 AS_BASE include parts.0 AS_BASE
set-width parts.0.advanceWidth set-width parts.0.advanceWidth
@ -190,10 +201,11 @@ let : begin
include part include part
# eject right-bottom serifs # eject right-bottom serifs
if (part.name === 'rtailBR') : eject-contour 'serifRB' if (part.name === 'rtailBR') : eject-contour 'serifRB'
if [not glyphs.(composition)] : begin # if [not glyphs.(composition)] : begin
font.features.ccmp.push : 'sub ' + composition + ' by ' + glyphName # font.features.ccmp.push : 'sub ' + composition + ' by ' + glyphName
set glyphs.(composition) glyphs.(glyphName) # set glyphs.(composition) glyphs.(glyphName)
inc nComposed foreach [{glyphName code parts} : items-of foundDecompositions] : begin
create-glyph glyphName construction
progress "Precomposed (\(nComposed) glyphs)" progress "Precomposed (\(nComposed) glyphs)"

View File

@ -381,13 +381,15 @@ define [WaveShape l r cy extendy tension sw] : glyph-construction
g4 r (cy + endwavey) g4 r (cy + endwavey)
# Derived subfonts # Derived subfonts
define [Fork glyphs params] : begin define [Fork gs params] : begin
local p : Object.create params local p : Object.create params
local shouldBuildList {} local shouldBuildList {}
foreach glyphid [items-of glyphs] : set shouldBuildList : shouldBuildList.concat {glyphid :: dependencyProfile.(glyphid)} foreach glyphid [items-of gs] : set shouldBuildList : shouldBuildList.concat {glyphid :: dependencyProfile.(glyphid)}
set shouldBuildList : shouldBuildList.filter : [x] -> [not [not x]] set shouldBuildList : shouldBuildList.filter : [x] -> [not [not x]]
local shouldBuildUnicodes : shouldBuildList.map ([x] -> [if (glyphs.(x) && glyphs.(x).unicode) glyphs.(x).unicode.0 nothing])
:.filter ([x] -> [not [not x]])
try : begin try : begin
local forkFont : buildFont.call [TempFont] p shouldBuildList local forkFont : buildFont.call [TempFont] p shouldBuildList shouldBuildUnicodes
: ex : ex
: begin : begin
if ex.glyfMap : return ex.glyfMap if ex.glyfMap : return ex.glyfMap

View File

@ -255,7 +255,7 @@ create-glyph 'eta' : glyph-construction
include pMarks include pMarks
set-anchor 'lf' BASE (SB + HALFSTROKE) 0 set-anchor 'lf' BASE (SB + HALFSTROKE) 0
include : nShoulder (SB + STROKE * CORRECTION_HX) RIGHTSB (STROKE * 0.3) XH DESCENDER SMALLSMOOTHA SMALLSMOOTHB include : nShoulder (SB + STROKE * CORRECTION_HX) RIGHTSB SHOULDERFINE XH DESCENDER SMALLSMOOTHA SMALLSMOOTHB
include : VBarLeft SB 0 XH include : VBarLeft SB 0 XH
if SLAB : begin if SLAB : begin
include : LeftwardTopSerif SB XH SIDEJUT include : LeftwardTopSerif SB XH SIDEJUT

View File

@ -379,7 +379,7 @@ create-glyph 'Eng' : glyph-construction
assign-unicode 0x14A assign-unicode 0x14A
include capitalMarks include capitalMarks
include : nShoulder (SB + STROKE) RIGHTSB (STROKE * 0.3) CAP (HOOK + HALFSTROKE + O) SMOOTHA SMOOTHB include : nShoulder (SB + STROKE) RIGHTSB SHOULDERFINE CAP (HOOK + HALFSTROKE + O) SMOOTHA SMOOTHB
include : VerticalHook (RIGHTSB - HALFSTROKE * CORRECTION_HX) (HOOK + HALFSTROKE + O) [Math.max ((SB - RIGHTSB) / 2 + HALFSTROKE) (-HOOKX)] HOOK include : VerticalHook (RIGHTSB - HALFSTROKE * CORRECTION_HX) (HOOK + HALFSTROKE + O) [Math.max ((SB - RIGHTSB) / 2 + HALFSTROKE) (-HOOKX)] HOOK
include : VBar (SB + HALFSTROKE * CORRECTION_HX) 0 CAP include : VBar (SB + HALFSTROKE * CORRECTION_HX) 0 CAP
@ -741,7 +741,7 @@ create-glyph 'latinEta' : glyph-construction
include ifMarks include ifMarks
set-anchor 'lf' BASE (SB + HALFSTROKE) 0 set-anchor 'lf' BASE (SB + HALFSTROKE) 0
include : nShoulder (SB + STROKE) RIGHTSB (STROKE * 0.3) CAP DESCENDER SMALLSMOOTHA SMALLSMOOTHB include : nShoulder (SB + STROKE) RIGHTSB SHOULDERFINE CAP DESCENDER SMALLSMOOTHA SMALLSMOOTHB
include : VBar (SB + HALFSTROKE * CORRECTION_HX) 0 CAP include : VBar (SB + HALFSTROKE * CORRECTION_HX) 0 CAP
if SLAB : begin if SLAB : begin
include : LeftwardTopSerif SB CAP SIDEJUT include : LeftwardTopSerif SB CAP SIDEJUT
@ -758,7 +758,7 @@ create-glyph 'latineta' : glyph-construction
include pMarks include pMarks
set-anchor 'lf' BASE (SB + HALFSTROKE) 0 set-anchor 'lf' BASE (SB + HALFSTROKE) 0
include : nShoulder (SB + STROKE * CORRECTION_HX) RIGHTSB (STROKE * 0.3) XH DESCENDER SMALLSMOOTHA SMALLSMOOTHB include : nShoulder (SB + STROKE * CORRECTION_HX) RIGHTSB SHOULDERFINE XH DESCENDER SMALLSMOOTHA SMALLSMOOTHB
include : VBarLeft SB 0 XH include : VBarLeft SB 0 XH
if SLAB : begin if SLAB : begin
include : LeftwardTopSerif SB XH SIDEJUT include : LeftwardTopSerif SB XH SIDEJUT

View File

@ -117,6 +117,7 @@ create-glyph 'tildeAbove' : glyph-construction
:.set-width markHalfStroke markHalfStroke :.set-width markHalfStroke markHalfStroke
:.cubic-to [mix leftEnd rightEnd tildeWaveX] [mix bot top tildeWave] [mix leftEnd rightEnd (1 - tildeWaveX)] [mix bot top (1 - tildeWave)] rightEnd [mix tbot ttop (1 - tildeWaveEnd)] :.cubic-to [mix leftEnd rightEnd tildeWaveX] [mix bot top tildeWave] [mix leftEnd rightEnd (1 - tildeWaveX)] [mix bot top (1 - tildeWave)] rightEnd [mix tbot ttop (1 - tildeWaveEnd)]
:.set-samples 11 :.set-samples 11
:.to-outline
include s include s

View File

@ -1,14 +1,20 @@
SUPPORT_FILES = support/glyph.js support/stroke.js support/spiroexpand.js support/spirokit.js parameters.js extract.js generate.js emptyfont.toml parameters.toml SUPPORT_FILES_FROM_PATEL = support/glyph.js support/stroke.js support/spiroexpand.js support/spirokit.js parameters.js
SUPPORT_FILES = $(SUPPORT_FILES_FROM_PATEL) support/glyph.js support/stroke.js support/spiroexpand.js support/spirokit.js parameters.js extract.js generate.js emptyfont.toml parameters.toml
GLYPH_SEGMENTS = glyphs/common-shapes.patel glyphs/overmarks.patel glyphs/latin-basic-capital.patel glyphs/latin-basic-lower.patel glyphs/greek.patel glyphs/cyrillic-basic.patel glyphs/latin-extend-basis.patel glyphs/latin-extend-decorated.patel glyphs/cyrillic-extended.patel glyphs/numbers.patel glyphs/symbol-punctuation.patel glyphs/symbol-math.patel glyphs/symbol-geometric.patel glyphs/symbol-other.patel glyphs/symbol-letter.patel glyphs/autobuilds.patel GLYPH_SEGMENTS = glyphs/common-shapes.patel glyphs/overmarks.patel glyphs/latin-basic-capital.patel glyphs/latin-basic-lower.patel glyphs/greek.patel glyphs/cyrillic-basic.patel glyphs/latin-extend-basis.patel glyphs/latin-extend-decorated.patel glyphs/cyrillic-extended.patel glyphs/numbers.patel glyphs/symbol-punctuation.patel glyphs/symbol-math.patel glyphs/symbol-geometric.patel glyphs/symbol-other.patel glyphs/symbol-letter.patel glyphs/autobuilds.patel
SCRIPTS = $(SUPPORT_FILES) buildglyphs.js SCRIPTS = $(SUPPORT_FILES) buildglyphs.js
SCRIPTS_FROM_PATEL = $(SUPPORT_FILES_FROM_PATEL) buildglyphs.js
buildglyphs.js : buildglyphs.patel $(GLYPH_SEGMENTS) buildglyphs.js : buildglyphs.patel $(GLYPH_SEGMENTS)
patel-c --optimize --strict $< -o $@
$(SUPPORT_FILES) :
patel-c --strict $< -o $@ patel-c --strict $< -o $@
$(SUPPORT_FILES_FROM_PATEL) :
patel-c --optimize --strict $< -o $@
support/glyph.js : support/glyph.patel support/glyph.js : support/glyph.patel
support/stroke.js : support/stroke.patel support/stroke.js : support/stroke.patel
support/spirokit.js : support/spirokit.patel support/spirokit.js : support/spirokit.patel
support/spiroexpand.js : support/spiroexpand.patel support/spiroexpand.js : support/spiroexpand.patel
parameters.js : parameters.patel parameters.js : parameters.patel
cleanscripts :
-@rm $(SCRIPTS_FROM_PATEL)
scripts : $(SCRIPTS)

View File

@ -1,4 +1,4 @@
define [build parametersData styles] : begin export : define [build parametersData styles] : begin
local param {.} local param {.}
local variantSelector {.} local variantSelector {.}
foreach [style : items-of styles] : begin foreach [style : items-of styles] : begin
@ -9,6 +9,3 @@ define [build parametersData styles] : begin
set variantSelector.(k) hive.variantSelector.(k) set variantSelector.(k) hive.variantSelector.(k)
param.variantSelector = variantSelector param.variantSelector = variantSelector
return param return param
exports.build = build

View File

@ -1,8 +1,7 @@
define bezierCubic2Q2 [require 'node-sfnt/lib/math/bezierCubic2Q2'] import 'node-sfnt/lib/math/bezierCubic2Q2' as bezierCubic2Q2
define tp [require './transform'].transformPoint import './transform' as [object [transformPoint tp] [untransform utp] inverse]
define utp [require './transform'].untransform import 'bezier-js' as Bezier
define Stroke [require './stroke'].Stroke
define Bezier [require 'bezier-js']
define [mix a b p] : a + (b - a) * p define [mix a b p] : a + (b - a) * p
define [ratio l r m] : if [l === r] 0 ((m - l) / (r - l)) define [ratio l r m] : if [l === r] 0 ((m - l) / (r - l))
@ -17,7 +16,7 @@ define id {
define [fallback] : for [local j 0] (j < arguments.length) [inc j] : if (arguments.(j) !== nothing) : return arguments.(j) define [fallback] : for [local j 0] (j < arguments.length) [inc j] : if (arguments.(j) !== nothing) : return arguments.(j)
define aFunction {.unapply [function [obj arity] [if (obj <@ Function) {obj} null]]} define aFunction {.unapply [function [obj arity] [if (obj <@ Function) {obj} null]]}
define [Glyph name] : begin export default : define [Glyph name] : begin
set this.name name set this.name name
set this.unicode {} set this.unicode {}
set this.contours {} set this.contours {}
@ -80,24 +79,6 @@ define [Glyph.prototype.reverse-last] : begin
if [this.contours && this.contours.(this.contours.length - 1)] : begin if [this.contours && this.contours.(this.contours.length - 1)] : begin
this.contours.(this.contours.length - 1) = [this.contours.(this.contours.length - 1).reverse] this.contours.(this.contours.length - 1) = [this.contours.(this.contours.length - 1).reverse]
define [Glyph.prototype.put-shapes contours] : begin
local t this.gizmo
set this.gizmo id
foreach contour [items-of contours] : if contour : begin
this.start-from contour.0.x contour.0.y
for [local j 1] (j < contour.length) [inc j] : begin
local point contour.(j)
if point.cubic
: then : begin
local p2 contour.((j + 1))
local p3 contour.((j + 2))
this.cubic-to point.x point.y p2.x p2.y p3.x p3.y
j = j + 2
: else : if point.onCurve [this.line-to point.x point.y] [this.curve-control point.x point.y]
this.tag-contour [fallback contour.tag this.defaultTag]
set this.gizmo t
return this
define [Glyph.prototype.tag-contour tag n] : begin define [Glyph.prototype.tag-contour tag n] : begin
if this.contours : begin if this.contours : begin
local lastContour this.contours.(this.contours.length - 1) local lastContour this.contours.(this.contours.length - 1)
@ -110,7 +91,6 @@ define [Glyph.prototype.eject-contour tag] : begin
define [Glyph.prototype.include component copyAnchors quenches] : begin define [Glyph.prototype.include component copyAnchors quenches] : begin
local glyph : match component local glyph : match component
[aFunction it] : return : component.call this [aFunction it] : return : component.call this
[Stroke.is it] {.contours [component.to-outline]}
{:: contours} {.contours contours} {:: contours} {.contours contours}
otherwise component otherwise component
local contours glyph.contours local contours glyph.contours
@ -147,13 +127,15 @@ define [Glyph.prototype.include component copyAnchors quenches] : begin
set transform.x : transform.x + shiftx set transform.x : transform.x + shiftx
set transform.y : transform.y + shifty set transform.y : transform.y + shifty
if contours : begin if contours : begin
this.put-shapes : contours.map : function [contour] : begin foreach [contour : items-of contours] : begin
local doput true
if quenches : foreach [tag : items-of quenches] : begin if quenches : foreach [tag : items-of quenches] : begin
if [contour.tag === tag] : return null if [contour.tag === tag] : set doput false
return : begin if doput : begin
local r : contour.map : function [point] : tp transform point local c {}
set r.tag contour.tag foreach [point : items-of contour] : c.push : tp transform point
* r set c.tag contour.tag
this.contours.push c
if (([not contours] || copyAnchors) && glyph.anchors) : set this.anchors : let [a {.}] [anchors glyph.anchors] [keys : Object.keys glyph.anchors] : begin if (([not contours] || copyAnchors) && glyph.anchors) : set this.anchors : let [a {.}] [anchors glyph.anchors] [keys : Object.keys glyph.anchors] : begin
foreach k [items-of keys] [set a.(k) anchors.(k)] foreach k [items-of keys] [set a.(k) anchors.(k)]
* a * a
@ -239,5 +221,3 @@ define [Glyph.prototype.cleanup t] : begin
foreach point [items-of contour] : if [not point.unimportant] : cleanedContour.push point foreach point [items-of contour] : if [not point.unimportant] : cleanedContour.push point
this.contours.(c) = cleanedContour this.contours.(c) = cleanedContour
return this return this
exports.Glyph = Glyph

View File

@ -1,4 +1,4 @@
exports.intersection = function (line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) { module.exports = function (line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {
// if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point
var denominator, a, b, numerator1, numerator2, result = { var denominator, a, b, numerator1, numerator2, result = {
x: null, x: null,

View File

@ -1,4 +1,4 @@
exports.createInterpolant = function(xs, ys) { module.exports = function(xs, ys) {
var i, length = xs.length; var i, length = xs.length;
// Deal with length issues // Deal with length issues

View File

@ -1,11 +1,10 @@
define smooth [require './monotonic-interpolate'].createInterpolant import './monotonic-interpolate' as smooth
define tp [require './transform'].transformPoint import './transform' as [object [transformPoint tp] [untransform utp] inverse]
define utp [require './transform'].untransform
define [fallback] : for [local j 0] (j < arguments.length) [inc j] : if (arguments.(j) !== nothing) : return arguments.(j) define [fallback] : for [local j 0] (j < arguments.length) [inc j] : if (arguments.(j) !== nothing) : return arguments.(j)
define [linreg x0 y0 x1 y1 x] : y0 + (x - x0) * (y1 - y0) / (x1 - x0) define [linreg x0 y0 x1 y1 x] : y0 + (x - x0) * (y1 - y0) / (x1 - x0)
define [SpiroExpansionContext] : begin export default : define [SpiroExpansionContext] : begin
set this.gizmo {.xx 1 .yy 1 .xy 0 .yy 0 .x 0 .y 0} set this.gizmo {.xx 1 .yy 1 .xy 0 .yy 0 .x 0 .y 0}
set this.controlKnots {} set this.controlKnots {}
set this.defaultd1 0 set this.defaultd1 0
@ -147,5 +146,3 @@ define [SpiroExpansionContext.prototype.expand contrast] : begin
"right" "left" "right" "left"
type type type type
return {.lhs lhs .rhs rhs} return {.lhs lhs .rhs rhs}
exports.SpiroExpansionContext = SpiroExpansionContext

View File

@ -1,9 +1,10 @@
define libspiro : require 'libspiro-js' import 'libspiro-js' as libspiro
define SpiroExpansionContext [require './spiroexpand'].SpiroExpansionContext import './spiroexpand' as SpiroExpansionContext
define [fallback] : for [local j 0] (j < arguments.length) [inc j] : if (arguments.(j) !== nothing) : return arguments.(j) define [fallback] : for [local j 0] (j < arguments.length) [inc j] : if (arguments.(j) !== nothing) : return arguments.(j)
define [mix a b p] : a + (b - a) * p define [mix a b p] : a + (b - a) * p
define [SetupBuilders args] : begin export : define [SetupBuilders args] : begin
define [object para Glyph CONTRAST globalTransform CONTRAST STROKE SUPERNESS] args define [object para Glyph CONTRAST globalTransform CONTRAST STROKE SUPERNESS] args
define [g4 x y f] {.x x .y y .type 'g4' .af f} define [g4 x y f] {.x x .y y .type 'g4' .af f}
@ -171,5 +172,3 @@ define [SetupBuilders args] : begin
widths heading unimportant important widths heading unimportant important
alsothru alsothruthem bezcontrols quadcontrols archv arcvh complexThru alsothru alsothruthem bezcontrols quadcontrols archv arcvh complexThru
dispiro spiro-outline] dispiro spiro-outline]
exports.SetupBuilders = SetupBuilders

View File

@ -1,8 +1,7 @@
define smooth [require './monotonic-interpolate'].createInterpolant import './monotonic-interpolate' as smooth
define intersection [require './intersection'].intersection import 'bezier-js' as Bezier
define Bezier [require 'bezier-js'] import './intersection' as intersection
define tp [require './transform'].transformPoint import './transform' as [object [transformPoint tp] [untransform utp] inverse]
define utp [require './transform'].untransform
define [fallback] : for [local j 0] (j < arguments.length) [inc j] : if (arguments.(j) !== nothing) : return arguments.(j) define [fallback] : for [local j 0] (j < arguments.length) [inc j] : if (arguments.(j) !== nothing) : return arguments.(j)
define [mix a b p] : a + (b - a) * p define [mix a b p] : a + (b - a) * p
@ -16,7 +15,7 @@ define KAPPA 0.51
define BKAPPA : KAPPA + 0.1 define BKAPPA : KAPPA + 0.1
define CKAPPA BKAPPA define CKAPPA BKAPPA
define [Stroke] : begin export default : define [Stroke] : begin
this.points = {} this.points = {}
this.samples = SAMPLES this.samples = SAMPLES
this.gizmo = { this.gizmo = {