From eb92ef6234820e180aa0198bc0d4eb2f52efde77 Mon Sep 17 00:00:00 2001 From: Belleve Invis Date: Tue, 21 Jul 2015 16:44:34 +0800 Subject: [PATCH] Added glyph three and five --- buildglyphs-intro.patel | 10 ++-- buildglyphs.js | 104 +++++++++++++++++++++++++++---------- glyphs/common-shapes.patel | 25 +++++---- glyphs/latin-capital.patel | 2 +- glyphs/latin-lower.patel | 30 +++++------ glyphs/numbers.patel | 57 ++++++++++++++++++-- makefile | 17 +++--- parameters.js | 11 ++-- parameters.patel | 14 +++-- support/stroke.js | 59 +++++++++------------ support/stroke.patel | 13 +++-- 11 files changed, 227 insertions(+), 115 deletions(-) diff --git a/buildglyphs-intro.patel b/buildglyphs-intro.patel index 3ad5d95..84ee7e2 100644 --- a/buildglyphs-intro.patel +++ b/buildglyphs-intro.patel @@ -44,7 +44,8 @@ define STROKE para.stroke define DOTSIZE para.dotsize define BARPOS para.barpos define GBARPOS para.gbarpos -define LONGSERIF para.longserif +define FIVEBARPOS para.fivebarpos +define LONGJUT para.longjut define ACCENT para.accent @@ -67,9 +68,10 @@ define ITALICCORS : STROKE * globalTransform.yx # style parameters define KAPPA para.kappa define COKAPPA : 1 - KAPPA -define BKAPPA : KAPPA + 0.1 +define BKAPPA : para.bkappa || KAPPA + 0.1 +define CKAPPA : para.ckappa || BKAPPA define COBKAPPA : 1 - BKAPPA -define KAPPA_HOOK : para.kappa_hook || 0.7 +define KAPPA_HOOK : para.kappa_hook || BKAPPA + 0.1 define KAPPA_AHOOK : para.kappa_ahook || KAPPA_HOOK define TAILADJX : WIDTH * 0.2 define TAILADJY : XH * 0.25 @@ -77,7 +79,7 @@ define TAILADJKAPPA 0.75 define TAILADJSX : WIDTH * 0.2 define TAILADJSY 0 define TAILADJSKAPPA 0.75 -define ILBALANCE : LONGSERIF * 0.04 +define ILBALANCE : LONGJUT * 0.04 define JBALANCE : para.jbalance || HALFSTROKE + ILBALANCE define TBALANCE : para.tbalance || JBALANCE define TBALANCE2 : para.tbalance2 || TBALANCE diff --git a/buildglyphs.js b/buildglyphs.js index 1652415..6dcca1b 100644 --- a/buildglyphs.js +++ b/buildglyphs.js @@ -3,7 +3,7 @@ r0_Glyph = require('./support/glyph')['Glyph']; r0_Stroke = require('./support/stroke')['Stroke']; exports['build'] = function _r0_t0(r1_para) { - var r1_para, r1_variantSelector, r1_font, r1_glyphList, r1_glyphs, r1_globalTransform, r1_ITALICCOR, r1_UPWARD, r1_DOWNWARD, r1_RIGHTWARD, r1_LEFTWARD, r1_DESCENDER, r1_WIDTH, r1_CAP, r1_XH, r1_O, r1_OXHOOK, r1_SB, r1_HOOK, r1_AHOOK, r1_SHOOK, r1_RHOOK, r1_SMOOTH, r1_SMALLSMOOTH, r1_STROKE, r1_DOTSIZE, r1_BARPOS, r1_GBARPOS, r1_LONGSERIF, r1_ACCENT, r1_XO, r1_CAPO, r1_HALFSTROKE, r1_RIGHTSB, r1_MIDDLE, r1_CAPMIDDLE, r1_CAP_SMOOTH, r1_DOTRADIUS, r1_SMOOTHA, r1_SMOOTHB, r1_SMALLSMOOTHA, r1_SMALLSMOOTHB, r1_ITALICCORS, r1_KAPPA, r1_COKAPPA, r1_BKAPPA, r1_COBKAPPA, r1_KAPPA_HOOK, r1_KAPPA_AHOOK, r1_TAILADJX, r1_TAILADJY, r1_TAILADJKAPPA, r1_TAILADJSX, r1_TAILADJSY, r1_TAILADJSKAPPA, r1_ILBALANCE, r1_JBALANCE, r1_TBALANCE, r1_TBALANCE2, r1_RBALANCE, r1_BASE, r1_MARK, r1_MARKBASE, r1_tm, r1_markAboveLower, r1_markAboveCap, r1_markBelowLower, r1_markBelowZero, r1_capitalMarks, r1_bMarks, r1_eMarks, r1_pMarks, r1_ifMarks, r1_xn$createglyph$7Hrq, r1_Ring, r1_ORing, r1_leftwardTopSerif, r1_leftwardBottomSerif, r1_rightwardTopSerif, r1_rightwardBottomSerif, r1_sStrand, r1_nBowl, r1_sHookUpper, r1_twoHookUpper, r1_sHookLower, _r1_t0, _r1_t1, _r1_t2, _r1_t3, _r1_t4, _r1_t5, _r1_t6, _r1_t7, _r1_t8, _r1_t9, _r1_t10, _r1_t11, _r1_t12, _r1_t13, _r1_t14, _r1_t15, _r1_t16, _r1_t17, _r1_t18, _r1_t19, _r1_t20, _r1_t21, _r1_t22, _r1_t23, _r1_t24, _r1_t25, _r1_t26, _r1_t27, _r1_t28, _r1_t29, _r1_t30, _r1_t31, _r1_t32, _r1_t33, _r1_t34, _r1_t35, _r1_t36, _r1_t37, _r1_t38, _r1_t39, _r1_t40, _r1_t41, _r1_t42, _r1_t43, _r1_t44, _r1_t45, _r1_t46, _r1_t47, _r1_t48, _r1_t49, _r1_t50, _r1_t51, _r1_t52, _r1_t53, _r1_t54, _r1_t55, _r1_t56, _r1_t57, _r1_t58, _r1_t59, _r1_t60, _r1_t61, _r1_t62, _r1_t63, _r1_t64, _r1_t65, _r1_t66, _r1_t67, _r1_t68, _r1_t69, _r1_t70, _r1_t71, _r1_t72, _r1_t73, _r1_t74, _r1_t75, _r1_t76, _r1_t77, _r1_t78, _r1_t79, _r1_t80, _r1_t81, _r1_t82, _r1_t83, _r1_t84, _r1_t85, _r1_t86, _r1_t87, _r1_t88, _r1_t89, _r1_t90, _r1_t91, _r1_t92, _r1_t93, _r1_t94, _r1_t95, _r1_t96, _r1_t97, _r1_t98, _r1_t99, _r1_t100; + var r1_para, r1_variantSelector, r1_font, r1_glyphList, r1_glyphs, r1_globalTransform, r1_ITALICCOR, r1_UPWARD, r1_DOWNWARD, r1_RIGHTWARD, r1_LEFTWARD, r1_DESCENDER, r1_WIDTH, r1_CAP, r1_XH, r1_O, r1_OXHOOK, r1_SB, r1_HOOK, r1_AHOOK, r1_SHOOK, r1_RHOOK, r1_SMOOTH, r1_SMALLSMOOTH, r1_STROKE, r1_DOTSIZE, r1_BARPOS, r1_GBARPOS, r1_FIVEBARPOS, r1_LONGJUT, r1_ACCENT, r1_XO, r1_CAPO, r1_HALFSTROKE, r1_RIGHTSB, r1_MIDDLE, r1_CAPMIDDLE, r1_CAP_SMOOTH, r1_DOTRADIUS, r1_SMOOTHA, r1_SMOOTHB, r1_SMALLSMOOTHA, r1_SMALLSMOOTHB, r1_ITALICCORS, r1_KAPPA, r1_COKAPPA, r1_BKAPPA, r1_CKAPPA, r1_COBKAPPA, r1_KAPPA_HOOK, r1_KAPPA_AHOOK, r1_TAILADJX, r1_TAILADJY, r1_TAILADJKAPPA, r1_TAILADJSX, r1_TAILADJSY, r1_TAILADJSKAPPA, r1_ILBALANCE, r1_JBALANCE, r1_TBALANCE, r1_TBALANCE2, r1_RBALANCE, r1_BASE, r1_MARK, r1_MARKBASE, r1_tm, r1_markAboveLower, r1_markAboveCap, r1_markBelowLower, r1_markBelowZero, r1_capitalMarks, r1_bMarks, r1_eMarks, r1_pMarks, r1_ifMarks, r1_xn$createglyph$7Hrq, r1_Ring, r1_ORing, r1_leftwardTopSerif, r1_leftwardBottomSerif, r1_rightwardTopSerif, r1_rightwardBottomSerif, r1_sStrand, r1_nBowl, r1_sHookUpper, r1_twoHookUpper, r1_sHookLower, _r1_t0, _r1_t1, _r1_t2, _r1_t3, _r1_t4, _r1_t5, _r1_t6, _r1_t7, _r1_t8, _r1_t9, _r1_t10, _r1_t11, _r1_t12, _r1_t13, _r1_t14, _r1_t15, _r1_t16, _r1_t17, _r1_t18, _r1_t19, _r1_t20, _r1_t21, _r1_t22, _r1_t23, _r1_t24, _r1_t25, _r1_t26, _r1_t27, _r1_t28, _r1_t29, _r1_t30, _r1_t31, _r1_t32, _r1_t33, _r1_t34, _r1_t35, _r1_t36, _r1_t37, _r1_t38, _r1_t39, _r1_t40, _r1_t41, _r1_t42, _r1_t43, _r1_t44, _r1_t45, _r1_t46, _r1_t47, _r1_t48, _r1_t49, _r1_t50, _r1_t51, _r1_t52, _r1_t53, _r1_t54, _r1_t55, _r1_t56, _r1_t57, _r1_t58, _r1_t59, _r1_t60, _r1_t61, _r1_t62, _r1_t63, _r1_t64, _r1_t65, _r1_t66, _r1_t67, _r1_t68, _r1_t69, _r1_t70, _r1_t71, _r1_t72, _r1_t73, _r1_t74, _r1_t75, _r1_t76, _r1_t77, _r1_t78, _r1_t79, _r1_t80, _r1_t81, _r1_t82, _r1_t83, _r1_t84, _r1_t85, _r1_t86, _r1_t87, _r1_t88, _r1_t89, _r1_t90, _r1_t91, _r1_t92, _r1_t93, _r1_t94, _r1_t95, _r1_t96, _r1_t97, _r1_t98, _r1_t99, _r1_t100, _r1_t101, _r1_t102; r1_variantSelector = r1_para['variantSelector']; r1_font = require('./empty.json'); r1_glyphList = r1_font['glyf']; @@ -50,7 +50,8 @@ r1_DOTSIZE = r1_para['dotsize']; r1_BARPOS = r1_para['barpos']; r1_GBARPOS = r1_para['gbarpos']; - r1_LONGSERIF = r1_para['longserif']; + r1_FIVEBARPOS = r1_para['fivebarpos']; + r1_LONGJUT = r1_para['longjut']; r1_ACCENT = r1_para['accent']; r1_XO = r1_XH - r1_O; r1_CAPO = r1_CAP - r1_O; @@ -67,9 +68,10 @@ r1_ITALICCORS = r1_STROKE * r1_globalTransform['yx']; r1_KAPPA = r1_para['kappa']; r1_COKAPPA = 1 - r1_KAPPA; - r1_BKAPPA = r1_KAPPA + 0.1; + r1_BKAPPA = r1_para['bkappa'] || r1_KAPPA + 0.1; + r1_CKAPPA = r1_para['ckappa'] || r1_BKAPPA; r1_COBKAPPA = 1 - r1_BKAPPA; - r1_KAPPA_HOOK = r1_para['kappa_hook'] || 0.7; + r1_KAPPA_HOOK = r1_para['kappa_hook'] || r1_BKAPPA + 0.1; r1_KAPPA_AHOOK = r1_para['kappa_ahook'] || r1_KAPPA_HOOK; r1_TAILADJX = r1_WIDTH * 0.2; r1_TAILADJY = r1_XH * 0.25; @@ -77,7 +79,7 @@ r1_TAILADJSX = r1_WIDTH * 0.2; r1_TAILADJSY = 0; r1_TAILADJSKAPPA = 0.75; - r1_ILBALANCE = r1_LONGSERIF * 0.04; + r1_ILBALANCE = r1_LONGJUT * 0.04; r1_JBALANCE = r1_para['jbalance'] || r1_HALFSTROKE + r1_ILBALANCE; r1_TBALANCE = r1_para['tbalance'] || r1_JBALANCE; r1_TBALANCE2 = r1_para['tbalance2'] || r1_TBALANCE; @@ -224,7 +226,7 @@ var r12_u, r12_d, r12_l, r12_r, r12_my, r12_mx, r12_s; r12_my = (r12_u + r12_d) / 2; r12_mx = (r12_l + r12_r) / 2; - r12_s = new r0_Stroke()['set-transform'](r1_globalTransform)['start-from'](r12_mx, r12_d)['cubic-to'](r12_mx + (r12_l - r12_mx) * r1_BKAPPA, r12_d, r12_l, r12_my + (r12_d - r12_my) * r1_BKAPPA, r12_l, r12_my)['cubic-to'](r12_l, r12_my + (r12_u - r12_my) * r1_BKAPPA, r12_mx + (r12_l - r12_mx) * r1_BKAPPA, r12_u, r12_mx, r12_u)['cubic-to'](r12_mx + (r12_r - r12_mx) * r1_BKAPPA, r12_u, r12_r, r12_my + (r12_u - r12_my) * r1_BKAPPA, r12_r, r12_my)['cubic-to'](r12_r, r12_my + (r12_d - r12_my) * r1_BKAPPA, r12_mx + (r12_r - r12_mx) * r1_BKAPPA, r12_d, r12_mx, r12_d); + r12_s = new r0_Stroke()['set-transform'](r1_globalTransform)['start-from'](r12_mx, r12_d)['cubic-to'](r12_mx + (r12_l - r12_mx) * r1_CKAPPA, r12_d, r12_l, r12_my + (r12_d - r12_my) * r1_CKAPPA, r12_l, r12_my)['cubic-to'](r12_l, r12_my + (r12_u - r12_my) * r1_CKAPPA, r12_mx + (r12_l - r12_mx) * r1_CKAPPA, r12_u, r12_mx, r12_u)['cubic-to'](r12_mx + (r12_r - r12_mx) * r1_CKAPPA, r12_u, r12_r, r12_my + (r12_u - r12_my) * r1_CKAPPA, r12_r, r12_my)['cubic-to'](r12_r, r12_my + (r12_d - r12_my) * r1_CKAPPA, r12_mx + (r12_r - r12_mx) * r1_CKAPPA, r12_d, r12_mx, r12_d); return r12_s['points']; }; r1_ORing = function _r1_t5(r13_u, r13_d, r13_l, r13_r, r13_smooth) { @@ -232,7 +234,7 @@ r13_myu = r13_u - r13_smooth; r13_myd = r13_d + r13_smooth; r13_mx = (r13_l + r13_r) / 2; - r13_s = new r0_Stroke()['set-transform'](r1_globalTransform)['start-from'](r13_mx, r13_d)['cubic-to'](r13_mx + (r13_l - r13_mx) * r1_BKAPPA, r13_d, r13_l, r13_myd + (r13_d - r13_myd) * r1_BKAPPA, r13_l, r13_myd)['line-to'](r13_l, r13_myu)['cubic-to'](r13_l, r13_myu + (r13_u - r13_myu) * r1_BKAPPA, r13_mx + (r13_l - r13_mx) * r1_BKAPPA, r13_u, r13_mx, r13_u)['cubic-to'](r13_mx + (r13_r - r13_mx) * r1_BKAPPA, r13_u, r13_r, r13_myu + (r13_u - r13_myu) * r1_BKAPPA, r13_r, r13_myu)['line-to'](r13_r, r13_myd)['cubic-to'](r13_r, r13_myd + (r13_d - r13_myd) * r1_BKAPPA, r13_mx + (r13_r - r13_mx) * r1_BKAPPA, r13_d, r13_mx, r13_d); + r13_s = new r0_Stroke()['set-transform'](r1_globalTransform)['start-from'](r13_mx, r13_d)['cubic-to'](r13_mx + (r13_l - r13_mx) * r1_CKAPPA, r13_d, r13_l, r13_myd + (r13_d - r13_myd) * r1_CKAPPA, r13_l, r13_myd)['line-to'](r13_l, r13_myu)['cubic-to'](r13_l, r13_myu + (r13_u - r13_myu) * r1_CKAPPA, r13_mx + (r13_l - r13_mx) * r1_CKAPPA, r13_u, r13_mx, r13_u)['cubic-to'](r13_mx + (r13_r - r13_mx) * r1_CKAPPA, r13_u, r13_r, r13_myu + (r13_u - r13_myu) * r1_CKAPPA, r13_r, r13_myu)['line-to'](r13_r, r13_myd)['cubic-to'](r13_r, r13_myd + (r13_d - r13_myd) * r1_CKAPPA, r13_mx + (r13_r - r13_mx) * r1_CKAPPA, r13_d, r13_mx, r13_d); return r13_s['points']; }; r1_leftwardTopSerif = function _r1_t6(r14_x, r14_y, r14_length) { @@ -252,8 +254,10 @@ return new r0_Stroke()['set-transform'](r1_globalTransform)['start-from'](r17_x - r1_HALFSTROKE, r17_y)['heads-to'](r1_RIGHTWARD)['set-width'](r1_STROKE, 0)['line-to'](r17_x + r17_length + r1_globalTransform['yx'] * r1_STROKE, r17_y)['to-outline'](); }; r1_sStrand = function _r1_t10(r18_leftlimit, r18_rightlimit, r18__expansion, r18__roundp) { - var r18_leftlimit, r18_rightlimit, r18__expansion, r18__roundp, r18_expansion, r18_roundsize, r18_roundleft, r18_roundright, r18_sxleft, r18_sxright, r18_syleft, r18_syright, _r18_t0, _r18_t1; + var r18_leftlimit, r18_rightlimit, r18__expansion, r18__roundp, r18_expansion, r18_yItalicCorrection, r18_xItalicCorrection, r18_roundsize, r18_roundleft, r18_roundright, r18_sxleft, r18_sxright, r18_syleft, r18_syright, _r18_t0, _r18_t1; r18_expansion = r18__expansion || 0.25; + r18_yItalicCorrection = r1_globalTransform['yx'] * 0.98; + r18_xItalicCorrection = 1 / Math['sqrt'](1 - r18_yItalicCorrection * r18_yItalicCorrection); _r18_t0 = r1_SMOOTHA * (r18__roundp || 0.4); if (r18_leftlimit < r18_rightlimit) _r18_t1 = -1; @@ -266,7 +270,7 @@ r18_sxright = r1_WIDTH - r18_sxleft; r18_syleft = r18_roundleft + (r18_roundright - r18_roundleft) * (0.5 - r18_expansion); r18_syright = r18_roundleft + (r18_roundright - r18_roundleft) * (0.5 + r18_expansion); - return new r0_Stroke()['set-transform'](r1_globalTransform)['start-from'](r1_SB + r1_HALFSTROKE, r18_leftlimit)['set-width'](r1_HALFSTROKE, r1_HALFSTROKE)['curve-to'](r1_SB + r1_HALFSTROKE, r18_roundleft, r18_sxleft, r18_syleft)['line-to'](r18_sxright, r18_syright)['curve-to'](r1_RIGHTSB - r1_HALFSTROKE, r18_roundright, r1_RIGHTSB - r1_HALFSTROKE, r18_rightlimit)['to-outline'](); + return new r0_Stroke()['set-transform'](r1_globalTransform)['start-from'](r1_SB + r1_HALFSTROKE * r18_xItalicCorrection, r18_leftlimit - r1_HALFSTROKE * r18_yItalicCorrection)['set-width'](r1_HALFSTROKE, r1_HALFSTROKE)['curve-to'](r1_SB + r1_HALFSTROKE * r18_xItalicCorrection, r18_roundleft, r18_sxleft, r18_syleft)['line-to'](r18_sxright, r18_syright)['curve-to'](r1_RIGHTSB - r1_HALFSTROKE * r18_xItalicCorrection, r18_roundright, r1_RIGHTSB - r1_HALFSTROKE * r18_xItalicCorrection, r18_rightlimit + r1_HALFSTROKE * r18_yItalicCorrection)['to-outline'](); }; r1_nBowl = function _r1_t11(r19_left, r19_middle, r19_right, r19_fine) { var r19_left, r19_middle, r19_right, r19_fine, r19_bandLeft, r19_bandRight; @@ -966,7 +970,7 @@ r74_xn$setwidth$9Jrj(r1_WIDTH); r74_xn$assignunicode$7Hrq('J'); r74_include(r1_glyphs['J.straight'], true); - r74_xn$putshapes$9Jrj(r1_leftwardTopSerif(r1_RIGHTSB - r1_HALFSTROKE, r1_CAP, r1_LONGSERIF)); + r74_xn$putshapes$9Jrj(r1_leftwardTopSerif(r1_RIGHTSB - r1_HALFSTROKE, r1_CAP, r1_LONGJUT)); return void 0; }); r1_xn$createglyph$7Hrq('N', function _r1_t41() { @@ -1085,7 +1089,7 @@ r84_xn$setanchor$9Jrj = _r84_t0['set-anchor']['bind'](_r84_t0); _r84_t0['gizmo'] = r1_globalTransform; _r84_t0['set-width'](r1_WIDTH); - r84_xn$putshapes$9Jrj(r84_xn$createstroke$7Hrq()['start-from'](r1_MIDDLE - r1_LONGSERIF, r1_XH)['heads-to'](r1_RIGHTWARD)['set-width'](0, r1_STROKE)['line-to'](r1_MIDDLE + r1_LONGSERIF, r1_XH)['heads-to'](r1_RIGHTWARD)['to-outline']()); + r84_xn$putshapes$9Jrj(r84_xn$createstroke$7Hrq()['start-from'](r1_MIDDLE - r1_LONGJUT, r1_XH)['heads-to'](r1_RIGHTWARD)['set-width'](0, r1_STROKE)['line-to'](r1_MIDDLE + r1_LONGJUT, r1_XH)['heads-to'](r1_RIGHTWARD)['to-outline']()); return void 0; }); r1_xn$createglyph$7Hrq('o', function _r1_t46() { @@ -1394,7 +1398,7 @@ r110_hookx = r110_center + (r1_WIDTH - r1_SB * 2) * 0.82 - r1_OXHOOK + r1_TAILADJX * r1_globalTransform['yx']; r110_turn = r110_center + (r110_hookx - r110_center) * (0.5 + r1_globalTransform['yx'] * 0.5); r110_xn$putshapes$9Jrj(r110_xn$createstroke$7Hrq()['start-from'](r110_center, r1_CAP)['set-width'](r1_STROKE, 0)['heads-to'](r1_DOWNWARD)['line-to'](r110_center, r1_SMOOTHB)['arc-vh-to'](r110_turn, r1_O)['curve-to'](r110_turn + (r1_KAPPA_HOOK + r1_TAILADJKAPPA * r1_globalTransform['yx'] + 0.1) * (r110_hookx - r110_turn), r1_O, r110_hookx, r1_HOOK - r1_TAILADJY * r1_globalTransform['yx'])['to-outline']()); - r110_xn$putshapes$9Jrj(r110_xn$createstroke$7Hrq()['start-from'](r110_center + r1_HALFSTROKE - r1_LONGSERIF + r1_TBALANCE2, r1_XH)['heads-to'](r1_RIGHTWARD)['set-width'](0, r1_STROKE)['line-to'](r110_center + r1_HALFSTROKE + r1_LONGSERIF + r1_TBALANCE2, r1_XH)['heads-to'](r1_RIGHTWARD)['to-outline']()); + r110_xn$putshapes$9Jrj(r110_xn$createstroke$7Hrq()['start-from'](r110_center + r1_HALFSTROKE - r1_LONGJUT + r1_TBALANCE2, r1_XH)['heads-to'](r1_RIGHTWARD)['set-width'](0, r1_STROKE)['line-to'](r110_center + r1_HALFSTROKE + r1_LONGJUT + r1_TBALANCE2, r1_XH)['heads-to'](r1_RIGHTWARD)['to-outline']()); return void 0; }); r1_xn$createglyph$7Hrq('a.upright', function _r1_t59() { @@ -1601,7 +1605,7 @@ _r128_t0['gizmo'] = r1_globalTransform; _r128_t0['set-width'](r1_WIDTH); r128_include(r1_glyphs['dotlessi.straight'], true); - r128_xn$putshapes$9Jrj(r1_leftwardTopSerif(r1_MIDDLE, r1_XH, r1_LONGSERIF)); + r128_xn$putshapes$9Jrj(r1_leftwardTopSerif(r1_MIDDLE, r1_XH, r1_LONGJUT)); return void 0; }); r1_xn$createglyph$7Hrq('dotlessi.zshaped', function _r1_t68() { @@ -1621,7 +1625,7 @@ _r130_t0['gizmo'] = r1_globalTransform; _r130_t0['set-width'](r1_WIDTH); r130_include(r1_glyphs['dotlessi.hooky'], true); - r130_xn$putshapes$9Jrj(r1_rightwardBottomSerif(r1_MIDDLE, 0, r1_LONGSERIF)); + r130_xn$putshapes$9Jrj(r1_rightwardBottomSerif(r1_MIDDLE, 0, r1_LONGJUT)); return void 0; }); r1_xn$createglyph$7Hrq('dotlessi.serifed', function _r1_t69() { @@ -1643,9 +1647,9 @@ r132_include(r1_eMarks); r132_balance = r1_ILBALANCE; r132_xn$putshapes$9Jrj(r132_xn$createstroke$7Hrq()['start-from'](r1_MIDDLE + r132_balance, 0)['heads-to'](r1_UPWARD)['set-width'](r1_HALFSTROKE, r1_HALFSTROKE)['line-to'](r1_MIDDLE + r132_balance, r1_XH)['heads-to'](r1_UPWARD)['to-outline']()); - r132_xn$putshapes$9Jrj(r1_leftwardTopSerif(r1_MIDDLE + r132_balance, r1_XH, r1_LONGSERIF - r132_balance)); - r132_xn$putshapes$9Jrj(r1_rightwardBottomSerif(r1_MIDDLE, 0, r1_LONGSERIF)); - r132_xn$putshapes$9Jrj(r1_leftwardBottomSerif(r1_MIDDLE, 0, r1_LONGSERIF)); + r132_xn$putshapes$9Jrj(r1_leftwardTopSerif(r1_MIDDLE + r132_balance, r1_XH, r1_LONGJUT - r132_balance)); + r132_xn$putshapes$9Jrj(r1_rightwardBottomSerif(r1_MIDDLE, 0, r1_LONGJUT)); + r132_xn$putshapes$9Jrj(r1_leftwardBottomSerif(r1_MIDDLE, 0, r1_LONGJUT)); return void 0; }); r1_xn$createglyph$7Hrq('dotlessi', function _r1_t70() { @@ -1774,7 +1778,7 @@ _r142_t0['gizmo'] = r1_globalTransform; _r142_t0['set-width'](r1_WIDTH); r142_include(r1_glyphs['dotlessj.straight']); - r142_xn$putshapes$9Jrj(r1_leftwardTopSerif(r1_MIDDLE + r1_JBALANCE, r1_XH, r1_LONGSERIF)); + r142_xn$putshapes$9Jrj(r1_leftwardTopSerif(r1_MIDDLE + r1_JBALANCE, r1_XH, r1_LONGJUT)); return void 0; }); r1_xn$createglyph$7Hrq('dotlessj', function _r1_t75() { @@ -1857,7 +1861,7 @@ _r150_t0['gizmo'] = r1_globalTransform; _r150_t0['set-width'](r1_WIDTH); r150_include(r1_glyphs['l.straight']); - r150_xn$putshapes$9Jrj(r1_leftwardTopSerif(r1_MIDDLE, r1_CAP, r1_LONGSERIF)); + r150_xn$putshapes$9Jrj(r1_leftwardTopSerif(r1_MIDDLE, r1_CAP, r1_LONGJUT)); return void 0; }); r1_xn$createglyph$7Hrq('l.zshaped', function _r1_t79() { @@ -1877,7 +1881,7 @@ _r152_t0['gizmo'] = r1_globalTransform; _r152_t0['set-width'](r1_WIDTH); r152_include(r1_glyphs['l.hooky']); - r152_xn$putshapes$9Jrj(r1_rightwardBottomSerif(r1_MIDDLE, 0, r1_LONGSERIF)); + r152_xn$putshapes$9Jrj(r1_rightwardBottomSerif(r1_MIDDLE, 0, r1_LONGJUT)); return void 0; }); r1_xn$createglyph$7Hrq('l.serifed', function _r1_t80() { @@ -1898,9 +1902,9 @@ _r154_t0['set-width'](r1_WIDTH); r154_balance = r1_ILBALANCE; r154_xn$putshapes$9Jrj(r154_xn$createstroke$7Hrq()['start-from'](r1_MIDDLE + r154_balance, 0)['heads-to'](r1_UPWARD)['set-width'](r1_HALFSTROKE, r1_HALFSTROKE)['line-to'](r1_MIDDLE + r154_balance, r1_CAP)['heads-to'](r1_UPWARD)['to-outline']()); - r154_xn$putshapes$9Jrj(r1_leftwardTopSerif(r1_MIDDLE + r154_balance, r1_CAP, r1_LONGSERIF - r154_balance)); - r154_xn$putshapes$9Jrj(r1_rightwardBottomSerif(r1_MIDDLE, 0, r1_LONGSERIF)); - r154_xn$putshapes$9Jrj(r1_leftwardBottomSerif(r1_MIDDLE, 0, r1_LONGSERIF)); + r154_xn$putshapes$9Jrj(r1_leftwardTopSerif(r1_MIDDLE + r154_balance, r1_CAP, r1_LONGJUT - r154_balance)); + r154_xn$putshapes$9Jrj(r1_rightwardBottomSerif(r1_MIDDLE, 0, r1_LONGJUT)); + r154_xn$putshapes$9Jrj(r1_leftwardBottomSerif(r1_MIDDLE, 0, r1_LONGJUT)); return void 0; }); r1_xn$createglyph$7Hrq('l', function _r1_t81() { @@ -2446,12 +2450,60 @@ _r194_t0['set-width'](r1_WIDTH); r194_xn$setwidth$9Jrj(r1_WIDTH); r194_xn$assignunicode$7Hrq('2'); - r194_include(r1_capitalMarks); - r194_xn$putshapes$9Jrj(r1_twoHookUpper(r1_CAP, r1_SMOOTHA, r1_HOOK)); - r194_xn$putshapes$9Jrj(r1_sStrand(r1_STROKE, r1_CAP - r1_SMOOTHA)); + r194_xn$putshapes$9Jrj(r1_twoHookUpper(r1_CAP, r1_SMOOTHB, r1_HOOK)); + r194_xn$putshapes$9Jrj(r1_sStrand(r1_STROKE, r1_CAP - r1_SMOOTHB)); r194_xn$putshapes$9Jrj(r194_xn$createstroke$7Hrq()['start-from'](r1_SB, 0)['set-width'](r1_STROKE, 0)['heads-to'](r1_RIGHTWARD)['line-to'](r1_RIGHTSB, 0)['heads-to'](r1_RIGHTWARD)['to-outline']()); return void 0; }); + r1_xn$createglyph$7Hrq('three', function _r1_t101() { + var r196_xn$setwidth$9Jrj, r196_xn$assignunicode$7Hrq, r196_xn$startfrom$1aao, r196_xn$lineto$5sIl, r196_xn$curveto$1aao, r196_xn$cubicto$1aao, r196_xn$putshapes$9Jrj, r196_xn$reverselast$3qIs, r196_include, r196_xn$createstroke$7Hrq, r196_xn$setanchor$9Jrj, r196_threeRadius, _r196_t0; + _r196_t0 = this; + r196_xn$setwidth$9Jrj = _r196_t0['set-width']['bind'](_r196_t0); + r196_xn$assignunicode$7Hrq = _r196_t0['assign-unicode']['bind'](_r196_t0); + r196_xn$startfrom$1aao = _r196_t0['start-from']['bind'](_r196_t0); + r196_xn$lineto$5sIl = _r196_t0['line-to']['bind'](_r196_t0); + r196_xn$curveto$1aao = _r196_t0['curve-to']['bind'](_r196_t0); + r196_xn$cubicto$1aao = _r196_t0['cubic-to']['bind'](_r196_t0); + r196_xn$putshapes$9Jrj = _r196_t0['put-shapes']['bind'](_r196_t0); + r196_xn$reverselast$3qIs = _r196_t0['reverse-last']['bind'](_r196_t0); + r196_include = _r196_t0['include']['bind'](_r196_t0); + r196_xn$createstroke$7Hrq = _r196_t0['create-stroke']['bind'](_r196_t0); + r196_xn$setanchor$9Jrj = _r196_t0['set-anchor']['bind'](_r196_t0); + _r196_t0['gizmo'] = r1_globalTransform; + _r196_t0['set-width'](r1_WIDTH); + r196_xn$setwidth$9Jrj(r1_WIDTH); + r196_xn$assignunicode$7Hrq('3'); + r196_threeRadius = r1_CAPMIDDLE + r1_HALFSTROKE - r1_SMOOTH; + r196_xn$putshapes$9Jrj(r1_twoHookUpper(r1_CAP, r1_SMOOTHB, r1_HOOK)); + r196_xn$putshapes$9Jrj(r1_sHookLower(0, r1_SMOOTHA, r1_HOOK)); + r196_xn$putshapes$9Jrj(r196_xn$createstroke$7Hrq()['start-from'](r1_RIGHTSB, r1_CAP - r1_SMOOTHB)['set-width'](0, r1_STROKE)['arc-vh-to'](r1_RIGHTSB - r196_threeRadius, r1_CAPMIDDLE - r1_HALFSTROKE)['heads-to'](r1_LEFTWARD)['to-outline']()); + r196_xn$putshapes$9Jrj(r196_xn$createstroke$7Hrq()['start-from'](r1_RIGHTSB, r1_SMOOTHA)['set-width'](r1_STROKE, 0)['arc-vh-to'](r1_RIGHTSB - r196_threeRadius, r1_CAPMIDDLE + r1_HALFSTROKE)['heads-to'](r1_LEFTWARD)['to-outline']()); + return void 0; + }); + r1_xn$createglyph$7Hrq('five', function _r1_t102() { + var r198_xn$setwidth$9Jrj, r198_xn$assignunicode$7Hrq, r198_xn$startfrom$1aao, r198_xn$lineto$5sIl, r198_xn$curveto$1aao, r198_xn$cubicto$1aao, r198_xn$putshapes$9Jrj, r198_xn$reverselast$3qIs, r198_include, r198_xn$createstroke$7Hrq, r198_xn$setanchor$9Jrj, _r198_t0; + _r198_t0 = this; + r198_xn$setwidth$9Jrj = _r198_t0['set-width']['bind'](_r198_t0); + r198_xn$assignunicode$7Hrq = _r198_t0['assign-unicode']['bind'](_r198_t0); + r198_xn$startfrom$1aao = _r198_t0['start-from']['bind'](_r198_t0); + r198_xn$lineto$5sIl = _r198_t0['line-to']['bind'](_r198_t0); + r198_xn$curveto$1aao = _r198_t0['curve-to']['bind'](_r198_t0); + r198_xn$cubicto$1aao = _r198_t0['cubic-to']['bind'](_r198_t0); + r198_xn$putshapes$9Jrj = _r198_t0['put-shapes']['bind'](_r198_t0); + r198_xn$reverselast$3qIs = _r198_t0['reverse-last']['bind'](_r198_t0); + r198_include = _r198_t0['include']['bind'](_r198_t0); + r198_xn$createstroke$7Hrq = _r198_t0['create-stroke']['bind'](_r198_t0); + r198_xn$setanchor$9Jrj = _r198_t0['set-anchor']['bind'](_r198_t0); + _r198_t0['gizmo'] = r1_globalTransform; + _r198_t0['set-width'](r1_WIDTH); + r198_xn$setwidth$9Jrj(r1_WIDTH); + r198_xn$assignunicode$7Hrq('5'); + r198_xn$putshapes$9Jrj(r1_sHookLower(0, (r1_CAP * r1_FIVEBARPOS + r1_STROKE) / 2, r1_HOOK)); + r198_xn$putshapes$9Jrj(r198_xn$createstroke$7Hrq()['start-from'](r1_RIGHTSB, (r1_CAP * r1_FIVEBARPOS + r1_STROKE) / 2)['set-width'](r1_STROKE, 0)['arc-vh-to'](r1_MIDDLE, r1_CAP * r1_FIVEBARPOS + r1_STROKE)['line-to'](r1_SB + r1_TBALANCE / 2, r1_CAP * r1_FIVEBARPOS + r1_STROKE)['heads-to'](r1_LEFTWARD)['to-outline']()); + r198_xn$putshapes$9Jrj(r198_xn$createstroke$7Hrq()['start-from'](r1_SB + r1_TBALANCE / 2, r1_CAP)['set-width'](0, r1_STROKE)['heads-to'](r1_RIGHTWARD)['line-to'](r1_RIGHTSB - r1_TBALANCE / 2, r1_CAP)['heads-to'](r1_RIGHTWARD)['to-outline']()); + r198_xn$putshapes$9Jrj(r198_xn$createstroke$7Hrq()['start-from'](r1_SB + r1_TBALANCE / 2, r1_CAP * r1_FIVEBARPOS + r1_STROKE)['set-width'](0, r1_STROKE)['heads-to'](r1_UPWARD)['line-to'](r1_SB + r1_TBALANCE / 2, r1_CAP)['heads-to'](r1_UPWARD)['to-outline']()); + return void 0; + }); return r1_font; }; } diff --git a/glyphs/common-shapes.patel b/glyphs/common-shapes.patel index 71ab8dc..b44cf74 100644 --- a/glyphs/common-shapes.patel +++ b/glyphs/common-shapes.patel @@ -7,10 +7,10 @@ define [Ring u d l r] : begin { local s : new Stroke :.set-transform globalTransform :.start-from mx d - :.cubic-to [mx + [l - mx] * BKAPPA] d l [my + [d - my] * BKAPPA] l my - :.cubic-to l [my + [u - my] * BKAPPA] [mx + [l - mx] * BKAPPA] u mx u - :.cubic-to [mx + [r - mx] * BKAPPA] u r [my + [u - my] * BKAPPA] r my - :.cubic-to r [my + [d - my] * BKAPPA] [mx + [r - mx] * BKAPPA] d mx d + :.cubic-to [mx + [l - mx] * CKAPPA] d l [my + [d - my] * CKAPPA] l my + :.cubic-to l [my + [u - my] * CKAPPA] [mx + [l - mx] * CKAPPA] u mx u + :.cubic-to [mx + [r - mx] * CKAPPA] u r [my + [u - my] * CKAPPA] r my + :.cubic-to r [my + [d - my] * CKAPPA] [mx + [r - mx] * CKAPPA] d mx d return s.points } define [ORing u d l r smooth] : begin { @@ -20,12 +20,12 @@ define [ORing u d l r smooth] : begin { local s : new Stroke :.set-transform globalTransform :.start-from mx d - :.cubic-to [mx + [l - mx] * BKAPPA] d l [myd + [d - myd] * BKAPPA] l myd + :.cubic-to [mx + [l - mx] * CKAPPA] d l [myd + [d - myd] * CKAPPA] l myd :.line-to l myu - :.cubic-to l [myu + [u - myu] * BKAPPA] [mx + [l - mx] * BKAPPA] u mx u - :.cubic-to [mx + [r - mx] * BKAPPA] u r [myu + [u - myu] * BKAPPA] r myu + :.cubic-to l [myu + [u - myu] * CKAPPA] [mx + [l - mx] * CKAPPA] u mx u + :.cubic-to [mx + [r - mx] * CKAPPA] u r [myu + [u - myu] * CKAPPA] r myu :.line-to r myd - :.cubic-to r [myd + [d - myd] * BKAPPA] [mx + [r - mx] * BKAPPA] d mx d + :.cubic-to r [myd + [d - myd] * CKAPPA] [mx + [r - mx] * CKAPPA] d mx d return s.points } define [leftwardTopSerif x y length] : begin { @@ -67,6 +67,9 @@ define [rightwardBottomSerif x y length] : begin { define [sStrand leftlimit rightlimit _expansion _roundp] : begin { local expansion : _expansion || 0.25 + local yItalicCorrection [globalTransform.yx * 0.98] + local xItalicCorrection : 1 / [Math.sqrt [1 - yItalicCorrection * yItalicCorrection]] + local roundsize : [SMOOTHA * [_roundp || 0.4]] * [if [leftlimit < rightlimit] [-1] 1] local roundleft [leftlimit - roundsize] local roundright [rightlimit + roundsize] @@ -77,11 +80,11 @@ define [sStrand leftlimit rightlimit _expansion _roundp] : begin { return : new Stroke :.set-transform globalTransform - :.start-from [SB + HALFSTROKE] leftlimit + :.start-from [SB + HALFSTROKE * xItalicCorrection] [leftlimit - HALFSTROKE * yItalicCorrection] :.set-width HALFSTROKE HALFSTROKE - :.curve-to [SB + HALFSTROKE] roundleft sxleft syleft + :.curve-to [SB + HALFSTROKE * xItalicCorrection] roundleft sxleft syleft :.line-to sxright syright - :.curve-to [RIGHTSB - HALFSTROKE] roundright [RIGHTSB - HALFSTROKE] rightlimit + :.curve-to [RIGHTSB - HALFSTROKE * xItalicCorrection] roundright [RIGHTSB - HALFSTROKE * xItalicCorrection] [rightlimit + HALFSTROKE * yItalicCorrection] :.to-outline } diff --git a/glyphs/latin-capital.patel b/glyphs/latin-capital.patel index c99c510..b70ec95 100644 --- a/glyphs/latin-capital.patel +++ b/glyphs/latin-capital.patel @@ -590,7 +590,7 @@ create-glyph 'J.serifed' : glyph-construction { set-width WIDTH; assign-unicode 'J' include glyphs.'J.straight' true - put-shapes : leftwardTopSerif [RIGHTSB - HALFSTROKE] CAP LONGSERIF + put-shapes : leftwardTopSerif [RIGHTSB - HALFSTROKE] CAP LONGJUT } ### M N diff --git a/glyphs/latin-lower.patel b/glyphs/latin-lower.patel index d8aa660..815f62b 100644 --- a/glyphs/latin-lower.patel +++ b/glyphs/latin-lower.patel @@ -3,10 +3,10 @@ ### components create-glyph 'fbar' : glyph-construction { put-shapes : create-stroke - :.start-from [MIDDLE - LONGSERIF] XH + :.start-from [MIDDLE - LONGJUT] XH :.heads-to RIGHTWARD :.set-width 0 STROKE - :.line-to [MIDDLE + LONGSERIF] XH + :.line-to [MIDDLE + LONGJUT] XH :.heads-to RIGHTWARD :.to-outline } @@ -262,10 +262,10 @@ create-glyph 't' : glyph-construction { :.to-outline put-shapes : create-stroke - :.start-from [center + HALFSTROKE - LONGSERIF + TBALANCE2] XH + :.start-from [center + HALFSTROKE - LONGJUT + TBALANCE2] XH :.heads-to RIGHTWARD :.set-width 0 STROKE - :.line-to [center + HALFSTROKE + LONGSERIF + TBALANCE2] XH + :.line-to [center + HALFSTROKE + LONGJUT + TBALANCE2] XH :.heads-to RIGHTWARD :.to-outline } @@ -434,11 +434,11 @@ create-glyph 'dotlessi.straight' : glyph-construction { } create-glyph 'dotlessi.hooky' : glyph-construction { include glyphs.'dotlessi.straight' true - put-shapes : leftwardTopSerif MIDDLE XH LONGSERIF + put-shapes : leftwardTopSerif MIDDLE XH LONGJUT } create-glyph 'dotlessi.zshaped' : glyph-construction { include glyphs.'dotlessi.hooky' true - put-shapes : rightwardBottomSerif MIDDLE 0 LONGSERIF + put-shapes : rightwardBottomSerif MIDDLE 0 LONGJUT } create-glyph 'dotlessi.serifed' : glyph-construction { include eMarks @@ -451,9 +451,9 @@ create-glyph 'dotlessi.serifed' : glyph-construction { :.line-to [MIDDLE + balance] XH :.heads-to UPWARD :.to-outline - put-shapes : leftwardTopSerif [MIDDLE + balance] XH [LONGSERIF - balance] - put-shapes : rightwardBottomSerif MIDDLE 0 LONGSERIF - put-shapes : leftwardBottomSerif MIDDLE 0 LONGSERIF + put-shapes : leftwardTopSerif [MIDDLE + balance] XH [LONGJUT - balance] + put-shapes : rightwardBottomSerif MIDDLE 0 LONGJUT + put-shapes : leftwardBottomSerif MIDDLE 0 LONGJUT } create-glyph 'dotlessi' : glyph-construction { set-width WIDTH @@ -493,7 +493,7 @@ create-glyph 'dotlessj.straight' : glyph-construction { } create-glyph 'dotlessj.serifed' : glyph-construction { include glyphs.'dotlessj.straight' - put-shapes : leftwardTopSerif [MIDDLE + JBALANCE] XH LONGSERIF + put-shapes : leftwardTopSerif [MIDDLE + JBALANCE] XH LONGJUT } create-glyph 'dotlessj' : glyph-construction { @@ -521,11 +521,11 @@ create-glyph 'l.straight' : glyph-construction { } create-glyph 'l.hooky' : glyph-construction { include glyphs.'l.straight' - put-shapes : leftwardTopSerif MIDDLE CAP LONGSERIF + put-shapes : leftwardTopSerif MIDDLE CAP LONGJUT } create-glyph 'l.zshaped' : glyph-construction { include glyphs.'l.hooky' - put-shapes : rightwardBottomSerif MIDDLE 0 LONGSERIF + put-shapes : rightwardBottomSerif MIDDLE 0 LONGJUT } create-glyph 'l.serifed' : glyph-construction { local balance ILBALANCE @@ -536,9 +536,9 @@ create-glyph 'l.serifed' : glyph-construction { :.line-to [MIDDLE + balance] CAP :.heads-to UPWARD :.to-outline - put-shapes : leftwardTopSerif [MIDDLE + balance] CAP [LONGSERIF - balance] - put-shapes : rightwardBottomSerif MIDDLE 0 LONGSERIF - put-shapes : leftwardBottomSerif MIDDLE 0 LONGSERIF + put-shapes : leftwardTopSerif [MIDDLE + balance] CAP [LONGJUT - balance] + put-shapes : rightwardBottomSerif MIDDLE 0 LONGJUT + put-shapes : leftwardBottomSerif MIDDLE 0 LONGJUT } create-glyph 'l' : glyph-construction { set-width WIDTH diff --git a/glyphs/numbers.patel b/glyphs/numbers.patel index dff48e8..b1ab624 100644 --- a/glyphs/numbers.patel +++ b/glyphs/numbers.patel @@ -50,10 +50,9 @@ create-glyph 'one' : glyph-construction { create-glyph 'two' : glyph-construction { set-width WIDTH assign-unicode '2' - include capitalMarks - put-shapes : twoHookUpper CAP SMOOTHA HOOK - put-shapes : sStrand STROKE [CAP - SMOOTHA] + put-shapes : twoHookUpper CAP SMOOTHB HOOK + put-shapes : sStrand STROKE [CAP - SMOOTHB] put-shapes : create-stroke :.start-from SB 0 @@ -62,4 +61,56 @@ create-glyph 'two' : glyph-construction { :.line-to RIGHTSB 0 :.heads-to RIGHTWARD :.to-outline +} + +create-glyph 'three' : glyph-construction { + set-width WIDTH + assign-unicode '3' + + local threeRadius [CAPMIDDLE + HALFSTROKE - SMOOTH] + + put-shapes : twoHookUpper CAP SMOOTHB HOOK + put-shapes : sHookLower 0 SMOOTHA HOOK + + put-shapes : create-stroke + :.start-from RIGHTSB [CAP - SMOOTHB] + :.set-width 0 STROKE + :.arc-vh-to [RIGHTSB - threeRadius] [CAPMIDDLE - HALFSTROKE] + :.heads-to LEFTWARD + :.to-outline + put-shapes : create-stroke + :.start-from RIGHTSB SMOOTHA + :.set-width STROKE 0 + :.arc-vh-to [RIGHTSB - threeRadius] [CAPMIDDLE + HALFSTROKE] + :.heads-to LEFTWARD + :.to-outline +} + +create-glyph 'five' : glyph-construction { + set-width WIDTH + assign-unicode '5' + + put-shapes : sHookLower 0 [[CAP * FIVEBARPOS + STROKE] / 2] HOOK + put-shapes : create-stroke + :.start-from RIGHTSB [[CAP * FIVEBARPOS + STROKE] / 2] + :.set-width STROKE 0 + :.arc-vh-to MIDDLE [CAP * FIVEBARPOS + STROKE] + :.line-to [SB + TBALANCE / 2] [CAP * FIVEBARPOS + STROKE] + :.heads-to LEFTWARD + :.to-outline + + put-shapes : create-stroke + :.start-from [SB + TBALANCE / 2] CAP + :.set-width 0 STROKE + :.heads-to RIGHTWARD + :.line-to [RIGHTSB - TBALANCE / 2] CAP + :.heads-to RIGHTWARD + :.to-outline + put-shapes : create-stroke + :.start-from [SB + TBALANCE / 2] [CAP * FIVEBARPOS + STROKE] + :.set-width 0 STROKE + :.heads-to UPWARD + :.line-to [SB + TBALANCE / 2] CAP + :.heads-to UPWARD + :.to-outline } \ No newline at end of file diff --git a/makefile b/makefile index 2d229c5..8ed118e 100644 --- a/makefile +++ b/makefile @@ -1,17 +1,19 @@ SUPPORT_FILES = support/glyph.js support/stroke.js parameters.js GLYPH_SEGMENTS = glyphs/common-shapes.patel glyphs/latin-capital.patel glyphs/latin-lower.patel glyphs/numbers.patel +OBJDIR = build FILES = $(SUPPORT_FILES) buildglyphs.js -fonts : update codex-regular.ttf codex-bold.ttf codex-italic.ttf codex-bolditalic.ttf +fonts : update $(OBJDIR)/codexHW-regular.ttf $(OBJDIR)/codexHW-bold.ttf $(OBJDIR)/codexHW-italic.ttf $(OBJDIR)/codexHW-bolditalic.ttf + -codex-regular.ttf : $(FILES) +$(OBJDIR)/codexHW-regular.ttf : $(FILES) $(OBJDIR) node generate regular $@ -codex-bold.ttf : $(FILES) +$(OBJDIR)/codexHW-bold.ttf : $(FILES) $(OBJDIR) node generate bold $@ -codex-italic.ttf : $(FILES) +$(OBJDIR)/codexHW-italic.ttf : $(FILES) $(OBJDIR) node generate italic $@ -codex-bolditalic.ttf : $(FILES) +$(OBJDIR)/codexHW-bolditalic.ttf : $(FILES) $(OBJDIR) node generate bolditalic $@ update : $(FILES) @@ -23,4 +25,7 @@ buildglyphs.js : buildglyphs-intro.patel $(GLYPH_SEGMENTS) buildglyphs-final.pat cat $^ | patel-c --strict -o $@ support/glyph.js : support/glyph.patel support/stroke.js : support/stroke.patel -parameters.js : parameters.patel \ No newline at end of file +parameters.js : parameters.patel + +$(OBJDIR) : + @- mkdir $@ \ No newline at end of file diff --git a/parameters.js b/parameters.js index 366247c..e5f6c63 100644 --- a/parameters.js +++ b/parameters.js @@ -6,7 +6,11 @@ 'dotsize': 125, 'sb': 60, 'cap': 771, + 'descender': -178, 'xheight': 560, + 'barpos': 0.45, + 'gbarpos': 0.37, + 'fivebarpos': 0.48, 'hook': 145, 'ahook': 135, 'shook': 100, @@ -16,12 +20,9 @@ 'smoothadjust': 100, 'o': -8, 'oxhook': 0, - 'descender': -178, 'kappa': 0.515, 'italicangle': 0, - 'barpos': 0.45, - 'gbarpos': 0.37, - 'longserif': 175, + 'longjut': 175, 'accent': 175, 'tbalance': 70, 'tbalance2': 30, @@ -49,6 +50,8 @@ r0_bold['rbalance'] = 18; r0_bold['style'] = 'Bold'; r0_bold['weight'] = 600; + r0_bold['bkappa'] = 0.5; + r0_bold['ckappa'] = 0.528; r0_italic = Object['create'](r0_regular); r0_italic['italicangle'] = 10; r0_italic['tbalance'] = 70; diff --git a/parameters.patel b/parameters.patel index ba464f5..a69c571 100644 --- a/parameters.patel +++ b/parameters.patel @@ -4,22 +4,26 @@ define regular ( .dotsize 125 .sb 60 .cap 771 + .descender [-178] .xheight 560 + .barpos 0.45 + .gbarpos 0.37 + .fivebarpos 0.48 + .hook 145 .ahook 135 .shook 100 .rhook 75 + .smooth 192 .smallsmooth 242 .smoothadjust 100 + .o [-8] .oxhook 0 - .descender [-178] .kappa 0.515 .italicangle 0 - .barpos 0.45 - .gbarpos 0.37 - .longserif 175 + .longjut 175 .accent 175 .tbalance 70 .tbalance2 30 @@ -49,6 +53,8 @@ bold.tbalance = 60 bold.rbalance = 18 bold.style = 'Bold' bold.weight = 600 +bold.bkappa = 0.5 +bold.ckappa = 0.528 define italic : Object.create regular italic.italicangle = 10 diff --git a/support/stroke.js b/support/stroke.js index 31a8430..8b8b53a 100644 --- a/support/stroke.js +++ b/support/stroke.js @@ -170,7 +170,7 @@ }; }; r0_Stroke['prototype']['to-outline'] = function _r0_t17(r18_d1, r18_d2) { - var r18_d1, r18_d2, r18_d1s, r18_d2s, r18_pdxs, r18_pdys, r18_shapes, r18_subSegments, r18_p0, r18_j, r18_p1, r18_p2, r18_seg, r18_normalpt, r18_p3, r18_f1, r18_f2, r18_fpdx, r18_fpdy, r18_left, r18_right, r18_curve, r18_sample, r18_t, r18_tn, r18_lthis, r18_rthis, r18_lnext, r18_rnext, r18_lnthis1, r18_rnthis1, r18_lnnext1, r18_rnnext1, r18_lnthis2, r18_rnthis2, r18_lnnext2, r18_rnnext2, r18_lnthis3, r18_rnthis3, r18_lnnext3, r18_rnnext3, r18_dlthis, r18_drthis, r18_dlnext, r18_drnext, r18_il, r18_ir, r18_last, r18_shape, r18_k, r18_still, _r18_t0, _r18_t1, _r18_t2, _r18_t3, _r18_t4, _r18_t5, _r18_t6, _r18_t7, _r18_t8, _r18_t9, _r18_t10, _r18_t11, _r18_t12, _r18_t13, _r18_t14, _r18_t15, _r18_t16, _r18_t17, _r18_t18, _r18_t19, _r18_t20, _r18_t21, _r18_t22, _r18_t23, _r18_t24, _r18_t25, _r18_t26, _r18_t27, _r18_t28, _r18_t29, _r18_t30, _r18_t31, _r18_t32, _r18_t33, _r18_t34, _r18_t35, _r18_t36, _r18_t37, _r18_t38, _r18_t39, _r18_t40, _r18_t41, _r18_t42, _r18_t43, _r18_t44, _r18_t45, _r18_t46, _r18_t47, _r18_t48, _r18_t49, _r18_t50, _r18_t51, _r18_t52, _r18_t53, _r18_t54, _r18_t55, _r18_t56, _r18_t57, _r18_t58, _r18_t59, _r18_t60, _r18_t61, _r18_t62; + var r18_d1, r18_d2, r18_d1s, r18_d2s, r18_pdxs, r18_pdys, r18_shapes, r18_subSegments, r18_p0, r18_j, r18_p1, r18_p2, r18_seg, r18_normalpt, r18_p3, r18_f1, r18_f2, r18_fpdx, r18_fpdy, r18_left, r18_right, r18_curve, r18_sample, r18_t, r18_tn, r18_lthis, r18_rthis, r18_lnext, r18_rnext, r18_lnthis1, r18_rnthis1, r18_lnnext1, r18_rnnext1, r18_lnthis2, r18_rnthis2, r18_lnnext2, r18_rnnext2, r18_lnthis3, r18_rnthis3, r18_lnnext3, r18_rnnext3, r18_dlthis, r18_drthis, r18_dlnext, r18_drnext, r18_il, r18_ir, r18_last, r18_shape, r18_still, r18_k, _r18_t0, _r18_t1, _r18_t2, _r18_t3, _r18_t4, _r18_t5, _r18_t6, _r18_t7, _r18_t8, _r18_t9, _r18_t10, _r18_t11, _r18_t12, _r18_t13, _r18_t14, _r18_t15, _r18_t16, _r18_t17, _r18_t18, _r18_t19, _r18_t20, _r18_t21, _r18_t22, _r18_t23, _r18_t24, _r18_t25, _r18_t26, _r18_t27, _r18_t28, _r18_t29, _r18_t30, _r18_t31, _r18_t32, _r18_t33, _r18_t34, _r18_t35, _r18_t36, _r18_t37, _r18_t38, _r18_t39, _r18_t40, _r18_t41, _r18_t42, _r18_t43, _r18_t44, _r18_t45, _r18_t46, _r18_t47, _r18_t48, _r18_t49, _r18_t50, _r18_t51, _r18_t52, _r18_t53, _r18_t54, _r18_t55, _r18_t56, _r18_t57, _r18_t58, _r18_t59, _r18_t60, _r18_t61; _r18_t5 = this; if (_r18_t5['points'][0]['d1'] >= 0) _r18_t6 = _r18_t5['points'][0]['d1']; @@ -385,35 +385,26 @@ }); } } - _r18_t55 = r18_left; - _r18_t56 = _r18_t55['push']; - r18_last = r0_computeOffsetPoint(r18_curve, r18_j + 1, r18_j, r18_f1, r18_fpdx, r18_fpdy); - _r18_t57 = { - 'x': r18_last['x'], - 'y': r18_last['y'], - 'onCurve': true - }; - _r18_t56['call'](_r18_t55, _r18_t57); - _r18_t58 = r18_right; - _r18_t59 = _r18_t58['push']; - r18_last = r0_computeOffsetPoint(r18_curve, r18_j + 1, r18_j, r18_f2, r18_fpdx, r18_fpdy); - _r18_t60 = { - 'x': r18_last['x'], - 'y': r18_last['y'], - 'onCurve': true - }; - _r18_t59['call'](_r18_t58, _r18_t60); - r18_shapes['push'](r18_left['concat'](r18_right['reverse']())['map'](function _r18_t61(r21_p) { - var r21_p; - return { - 'x': r21_p['x'], - 'y': r21_p['y'], - 'onCurve': r21_p['onCurve'] - }; - })); - r18_left = []; - r18_right = []; } + _r18_t55 = r18_left; + _r18_t56 = _r18_t55['push']; + r18_last = r0_computeOffsetPoint(r18_curve, r18_j + 1, r18_j, r18_f1, r18_fpdx, r18_fpdy); + _r18_t57 = { + 'x': r18_last['x'], + 'y': r18_last['y'], + 'onCurve': true + }; + _r18_t56['call'](_r18_t55, _r18_t57); + _r18_t58 = r18_right; + _r18_t59 = _r18_t58['push']; + r18_last = r0_computeOffsetPoint(r18_curve, r18_j + 1, r18_j, r18_f2, r18_fpdx, r18_fpdy); + _r18_t60 = { + 'x': r18_last['x'], + 'y': r18_last['y'], + 'onCurve': true + }; + _r18_t59['call'](_r18_t58, _r18_t60); + r18_shapes['push'](r18_left['concat'](r18_right['reverse']())); _r18_t2 = r18_shapes; _r18_t3 = _r18_t2['length']; _r18_t4 = 0; @@ -436,11 +427,11 @@ r18_j = r18_k - 1; } } - return r18_shapes['map'](function _r18_t62(r23_shape) { - var r23_shape, _r23_t0; - return r23_shape['filter'](function _r23_t0(r24_x) { - var r24_x; - return r24_x && !r24_x['removable']; + return r18_shapes['map'](function _r18_t61(r22_shape) { + var r22_shape, _r22_t0; + return r22_shape['filter'](function _r22_t0(r23_x) { + var r23_x; + return r23_x && !r23_x['removable']; }); }); }; diff --git a/support/stroke.patel b/support/stroke.patel index 0d57714..7f168d1 100644 --- a/support/stroke.patel +++ b/support/stroke.patel @@ -202,18 +202,17 @@ define [Stroke.prototype.to-outline d1 d2] : begin { right.push (.x rthis.x .y rthis.y .onCurve true) }] } - left.push [begin [local last [computeOffsetPoint curve [j + 1] j f1 fpdx fpdy]] (.x last.x .y last.y .onCurve true)] - right.push [begin [local last [computeOffsetPoint curve [j + 1] j f2 fpdx fpdy]] (.x last.x .y last.y .onCurve true)] - - shapes.push : left.concat [right.reverse] :.map [[p] -> (.x p.x .y p.y .onCurve p.onCurve)] - set left () - set right () } + left.push [begin [local last [computeOffsetPoint curve [j + 1] j f1 fpdx fpdy]] (.x last.x .y last.y .onCurve true)] + right.push [begin [local last [computeOffsetPoint curve [j + 1] j f2 fpdx fpdy]] (.x last.x .y last.y .onCurve true)] + + shapes.push : left.concat [right.reverse] + # reduce linear oncurve points foreach shape [items-of shapes] : for [local j 0] [j < shape.length - 1] [inc j] : begin { local p0 shape`j - set still true + local still true for [local k [j + 1]] [still && k < shape.length - 1] [inc k] : begin { local p1 shape`k local p2 shape`[k + 1]