diff --git a/buildglyphs.aki b/buildglyphs.aki index 923649f..941e719 100644 --- a/buildglyphs.aki +++ b/buildglyphs.aki @@ -238,7 +238,7 @@ export as build : define [buildFont para recursive recursiveCodes] : begin define [superxy x] : Math.pow (1 - [Math.pow x SUPERNESS]) (1 / SUPERNESS) define [adviceSSmooth y sign] : begin - local ss : y * 0.22 + STROKE * 0.22 + 0.02 * (RIGHTSB - SB) + local ss : y * 0.22 + STROKE * 0.225 + 0.02 * (RIGHTSB - SB) return : ss + sign * globalTransform.yx * para.smoothadjust * (ss / SMALLSMOOTH) define [adviceGlottalStopSmooth y sign] : ((y - STROKE) * 0.25 + STROKE / 2) + sign * globalTransform.yx * para.smoothadjust define [shoulderMidSlope _fine _stroke _dir] : 0.5 * CORRECTION_HX * ([fallback _stroke STROKE] - [fallback _fine SHOULDERFINE]) / [fallback _stroke STROKE] + [fallback _dir 1] * globalTransform.yx diff --git a/extract.js b/extract.js index 8fb60d2..8dcb75d 100644 --- a/extract.js +++ b/extract.js @@ -93,6 +93,7 @@ if(argv.feature) { };*/ if(argv.svg) { + function cov(x){ return x.toFixed(4) } function toSVGPath(glyph){ var buf = ''; if(glyph.contours) for(var j = 0; j < glyph.contours.length; j++) { @@ -102,15 +103,15 @@ if(argv.svg) { if(contour.length) { lx = contour[0].x; ly = contour[0].y; - buf += 'M' + lx + ' ' + ly; + buf += 'M' + cov(lx) + ' ' + cov(ly); for(var k = 1; k < contour.length; k++) if(contour[k].onCurve){ lx = contour[k].x; ly = contour[k].y; - buf += 'L' + lx + ' ' + ly; + buf += 'L' + cov(lx) + ' ' + cov(ly); } else if(contour[k].cubic) { var rx = contour[k + 2].x; - var ry = contour[k + 2].y; - buf += 'C' + [contour[k].x, contour[k].y, contour[k + 1].x, contour[k + 1].y, rx, ry].join(' '); + var ry = contour[k + 2].y; + buf += 'C' + [contour[k].x, contour[k].y, contour[k + 1].x, contour[k + 1].y, rx, ry].map(cov).join(' '); lx = rx; ly = ry; k += 2; @@ -127,14 +128,14 @@ if(argv.svg) { var x2 = mix(rx, contour[k].x, 2 / 3); var y2 = mix(ry, contour[k].y, 2 / 3); - buf += 'C' + [x1, y1, x2, y2, rx, ry].join(' '); + buf += 'C' + [cov(x1), cov(y1), cov(x2), cov(y2), cov(rx), cov(ry)].join(' '); lx = rx; ly = ry; if(contour[k + 1].onCurve) k += 1; } else { var rx = contour[0].x; var ry = contour[0].y; - buf += 'Q' + contour[k].x + ' ' + contour[k].y + ' ' + contour[0].x + ' ' + contour[0].y; + buf += 'Q' + cov(contour[k].x) + ' ' + cov(contour[k].y) + ' ' + cov(contour[0].x) + ' ' + cov(contour[0].y); lx = rx; ly = ry; } diff --git a/glyphs/autobuilds.aki b/glyphs/autobuilds.aki index 96f5c74..3ad5336 100644 --- a/glyphs/autobuilds.aki +++ b/glyphs/autobuilds.aki @@ -226,7 +226,7 @@ define [suggestName name] : begin define [createCircledGlyphs records] : if [not recursive] : begin local dscale 0.55 local pendingGlyphs : records.map : [record] -> record.1 - local miniatureFont : Miniature pendingGlyphs 3.5 0.65 + local miniatureFont : Miniature pendingGlyphs [fallback para.smallCrowd 3.5] 0.65 foreach {unicode glyphid w} [items-of records] : create-glyph [suggestName : 'circle' + glyphid] : glyph-construction local width : fallback w WIDTH @@ -250,7 +250,7 @@ define [createCircledGlyphs records] : if [not recursive] : begin define [createSuperscripts records] : if [not recursive] : begin local pendingGlyphs : records.map : [record] -> record.1 - local miniatureFont : Miniature pendingGlyphs 3.5 0.7 + local miniatureFont : Miniature pendingGlyphs [fallback para.smallCrowd 3.5] 0.7 foreach {unicode glyphid} [items-of records] : create-glyph [suggestName : 'sup' + glyphid] : glyph-construction if unicode : assign-unicode unicode include miniatureFont.(glyphid) AS_BASE @@ -262,7 +262,7 @@ define [createSuperscripts records] : if [not recursive] : begin define [createSubscripts records] : if [not recursive] : begin local pendingGlyphs : records.map : [record] -> record.1 - local miniatureFont : Miniature pendingGlyphs 3.5 0.7 + local miniatureFont : Miniature pendingGlyphs [fallback para.smallCrowd 3.5] 0.7 foreach {unicode glyphid} [items-of records] : create-glyph [suggestName : 'sub' + glyphid] : glyph-construction if unicode : assign-unicode unicode include miniatureFont.(glyphid) AS_BASE @@ -285,7 +285,7 @@ define [createSMCPs records] : if [not recursive] : begin define [createMedievalCombs records] : if [not recursive] : begin local pendingGlyphs : records.map : [record] -> record.1 - local miniatureFont : Miniature pendingGlyphs 3.7 0.7 + local miniatureFont : Miniature pendingGlyphs [fallback para.smallCrowd2 3.5] 0.7 foreach {unicode glyphid} [items-of records] : create-glyph [suggestName : 'comb' + glyphid] : glyph-construction set-width 0 if unicode : assign-unicode unicode diff --git a/glyphs/common-shapes.aki b/glyphs/common-shapes.aki index fe63f37..cc60bc8 100644 --- a/glyphs/common-shapes.aki +++ b/glyphs/common-shapes.aki @@ -158,8 +158,8 @@ define [OBarLeftShape _top _left] : glyph-construction arcvh g4 (mb) O [widths.heading STROKE 0 {.y (1) .x (-sb)}] archv - flat.ai (RIGHTSB - OX) (0 + SMALLSMOOTHA) - curl.ai (RIGHTSB - OX) (top - SMALLSMOOTHB) + [if ((SMALLSMOOTHA + SMALLSMOOTHB) / top > 0.75) flat.ai flat] (RIGHTSB - OX) (0 + SMALLSMOOTHA) + [if ((SMALLSMOOTHA + SMALLSMOOTHB) / top > 0.75) curl.ai curl] (RIGHTSB - OX) (top - SMALLSMOOTHB) arcvh close @@ -434,11 +434,12 @@ define [HooktopLeftBar stroke bottom] : glyph-construction flat SB (CAP - SMALLSMOOTHA) curl SB [fallback bottom 0] [heading DOWNWARD] -define [CurlyTail fine rinner m1 bottom _right x2 y2] : begin +define [CurlyTail fine rinner m1 bottom _right x2 y2 adj adj2 adj3] : begin local right : _right - fine * [if (_right > m1) 1 (-1)] - local mid : mix [mix m1 right 0.5] (right - rinner * [if (_right > m1) 1 (-1)]) 0.4 + local mid : mix [mix m1 right 0.5] (right - rinner * [if (_right > m1) 1 (-1)]) [fallback adj 0.4] + local midu : mix [mix m1 right 0.5] (right - rinner * [if (_right > m1) 1 (-1)]) [fallback adj2 0.4] return : list - g4 mid (bottom + fine + O) [widths [if (_right > m1) 0 fine] [if (_right > m1) fine 0]] + g4.[if (_right > m1) 'right' 'left'].mid (mid + CORRECTION_OMIDX * fine * [fallback adj3 0] * [if (_right > m1) 1 (-1)]) (bottom + fine + O) [widths [if (_right > m1) 0 fine] [if (_right > m1) fine 0]] archv 2 g4 right (bottom + fine + rinner - 0.1) g4 right (bottom + fine + rinner + 0.1) @@ -467,12 +468,12 @@ define [FlatSlashShape middlex middle fine kx ky] : glyph-construction curl (middlex + LONGJUT * [fallback kx 0.8]) (middle + LONGJUT * [fallback ky 0.4]) # Spiro shapes -define [determineMixR w v] : piecewise +define [determineMixR w v adj] : piecewise (w <= v) 0.5 - true : 1 / ([Math.pow (1 - [Math.pow (1 - v / w) SUPERNESS]) (1 / SUPERNESS)] + 1) -define nHookSegments 4 + true : (adj || 1) / ([Math.pow (1 - [Math.pow (1 - v / w) SUPERNESS]) (1 / SUPERNESS)] + 1) +define nHookSegments 8 -define [HookShape toStraight toFinish isStart y tight s kkaf] : begin +define [HookShape toStraight toFinish isStart y tight s kkaf adj] : begin local atBottom : toStraight.y > y local ltr : if isStart (toFinish.x < toStraight.x) (toFinish.x > toStraight.x) toFinish.x = toFinish.x + OXHOOK * [if ltr (-1) 1] * [if isStart (-1) 1] @@ -483,7 +484,7 @@ define [HookShape toStraight toFinish isStart y tight s kkaf] : begin local w : Math.abs (toStraight.y - y) local v : Math.abs (toFinish.y - y) local u : Math.abs (toFinish.x - toStraight.x) - local mixr : determineMixR w v + local mixr : determineMixR w v adj local mx ([mix toStraight.x toFinish.x mixr] + ([if tight 0 : if atBottom 1 (-1)] * CORRECTION_OMIDX) * [fallback s STROKE]) local keyKnot : g4.[if ltr "right" "left"].mid mx y [fallback kkaf : if tight [heading [if ltr RIGHTWARD LEFTWARD]] nothing] @@ -506,8 +507,8 @@ define [HookShape toStraight toFinish isStart y tight s kkaf] : begin * keyKnot * segAfter -define [hookstart y tight s kkaf] : return {.type 'interpolate' .af [lambda [before after] [HookShape after before true y tight s kkaf]]} -define [hookend y tight s kkaf] : return {.type 'interpolate' .af [lambda [before after] [HookShape before after false y tight s kkaf]]} +define [hookstart y tight s kkaf adj] : return {.type 'interpolate' .af [lambda [before after] [HookShape after before true y tight s kkaf adj]]} +define [hookend y tight s kkaf adj] : return {.type 'interpolate' .af [lambda [before after] [HookShape before after false y tight s kkaf adj]]} define [WaveShape l r cy extendy tension sw] : glyph-construction local cx : mix l r 0.5 diff --git a/glyphs/letters-unified-basic.aki b/glyphs/letters-unified-basic.aki index 08382ad..55df896 100644 --- a/glyphs/letters-unified-basic.aki +++ b/glyphs/letters-unified-basic.aki @@ -384,7 +384,7 @@ symbol-block 'l' create-glyph 'looprevesh' : glyph-construction assign-unicode 0x1AA include ifMarks - local fine : adviceBlackness 5 + local fine : adviceBlackness 4 include : dispiro widths.center fine g4 MIDDLE (CAP - fine * 1.5) [heading DOWNWARD] @@ -1345,7 +1345,7 @@ symbol-block 'r' assign-unicode 'r' include eMarks - local fine : SHOULDERFINE * 0.75 + local fine : SHOULDERFINE * CTHIN local rhookx (RIGHTSB + RBALANCE2 - OXE) local mixp : 0.54 + 2 * globalTransform.yx * STROKE / WIDTH local mixpin : 0.65 + globalTransform.yx * [linreg 72 0.1 108 0.5 STROKE] @@ -1495,7 +1495,7 @@ define {CShape} : symbol-block 'C' flat.ai (SB + OX) (XH - SMALLSMOOTHA) curl.ai (SB + OX) SMALLSMOOTHB arcvh - CurlyTail fine rinner m1 0 RIGHTSB x2 y2 + CurlyTail fine rinner m1 0 RIGHTSB x2 y2 [linreg 500 (0.5) 375 (-0.25) WIDTH] nothing 1 create-glyph 'cyrE' : glyph-construction assign-unicode 0x42D @@ -2262,7 +2262,7 @@ define {FShape} : symbol-block 'F' define [FShape top y] : glyph-construction include : VBarLeft (SB * 1.5) 0 [fallback top CAP] include : HBarTop (SB * 1.5 - O) RIGHTSB [fallback top CAP] - include : HBar (SB * 1.5 - O) (RIGHTSB - [if SLAB (STROKE * 0.75) HALFSTROKE]) ([fallback top CAP] * [fallback y [if SLAB 0.52 0.54]]) + include : HBar (SB * 1.5 - O) (RIGHTSB - [Math.max HALFSTROKE ((RIGHTSB - SB) * 0.1)] - [if SLAB (STROKE * 0.25) 0]) ([fallback top CAP] * [fallback y [if SLAB 0.52 0.54]]) if SLAB : begin include : LeftwardTopSerif (SB * 1.5) [fallback top CAP] SIDEJUT include : CenterBottomSerif (SB * 1.5 + HALFSTROKE * CORRECTION_HX) 0 JUT @@ -2484,8 +2484,8 @@ define {SmallEShape} : symbol-block 'e' arcvh g4 (MIDDLE - CORRECTION_OMIDS) (top - O) archv - [if (top <= XH) flat.ai flat] (SB + OX) (top - SMALLSMOOTHA) - [if (top <= XH) curl.ai curl] (SB + OX) (0 + SMALLSMOOTHB) + [if ((SMALLSMOOTHA + SMALLSMOOTHB) / top > 0.75) flat.ai flat] (SB + OX) (top - SMALLSMOOTHA) + [if ((SMALLSMOOTHA + SMALLSMOOTHB) / top > 0.75) curl.ai curl] (SB + OX) (0 + SMALLSMOOTHB) hookend O nothing stroke g4 (RIGHTSB - OX * 0.5) AHOOK include : HBarBottom (SB + (stroke / 2) + OX) (RIGHTSB - (stroke / 2) - OX) barbottom stroke @@ -2677,19 +2677,20 @@ symbol-block 'S' g4 SB HOOK alias 'cyrDze' 0x405 'S' + local smallSMix : clamp 0 1 : linreg 0 [linreg 18 1 108 0.95 STROKE] 50 1 [Math.abs : WIDTH - 500] create-glyph 's' : glyph-construction set-width WIDTH assign-unicode 's' include eMarks - define smooth : adviceSSmooth XH (-1) + define smooth : adviceSSmooth XH (-1 - globalTransform.yx * 3) include : dispiro widths.lhs g4 RIGHTSB (XH - SHOOK) - hookstart XO + hookstart XO nothing nothing nothing smallSMix g4.down.mid SB (XH - smooth) - alsothru 0.5 0.5 [widths (ESS / 2) (ESS / 2)] + alsothru 0.5 0.5 [widths.center ESS] g4.down.mid RIGHTSB (smooth) [widths 0 STROKE] - hookend O + hookend O nothing nothing nothing smallSMix g4 SB SHOOK alias 'cyrdze' 0x455 's' @@ -2710,15 +2711,15 @@ symbol-block 'S' create-glyph 'revs' : glyph-construction assign-unicode 0x1A8 include eMarks - local smooth : adviceSSmooth XH 1 + local smooth : adviceSSmooth XH (1 + globalTransform.yx * 5) include : dispiro widths.rhs g4 SB (XH - SHOOK) - hookstart XO + hookstart XO nothing nothing nothing smallSMix g4 RIGHTSB (XH - smooth) - alsothru 0.5 0.5 [widths (ESS / 2) (ESS / 2)] + alsothru 0.5 0.5 [widths.center ESS] g4 SB (smooth) [widths STROKE 0] - hookend O + hookend O nothing nothing nothing smallSMix g4 RIGHTSB SHOOK create-glyph 'srtail' : glyph-construction @@ -2808,11 +2809,10 @@ symbol-block 'Z' eject-contour 'serifRB' include : dispiro widths.lhs - flat SB 0 + flat SB 0 [heading RIGHTWARD] curl (RIGHTSB - HOOKX) 0 archv - flat RIGHTSB (-HOOK) [widths 0 STROKE] - curl RIGHTSB (-HOOK - 1) + straight.down.end RIGHTSB (-HOOK) [widths.heading 0 STROKE DOWNWARD] create-glyph 'zdtail' : glyph-construction assign-unicode 0x225 @@ -2824,7 +2824,7 @@ symbol-block 'Z' flat SB 0 [heading RIGHTWARD] curl (RIGHTSB - HOOKX) 0 archv - g4 RIGHTSB (-HOOK) [widths.heading 0 STROKE DOWNWARD] + straight.down.end RIGHTSB (-HOOK) [widths.heading 0 STROKE DOWNWARD] create-glyph 'Zswash' : glyph-construction assign-unicode 0x2C7F diff --git a/glyphs/letters-unified-extended.aki b/glyphs/letters-unified-extended.aki index 44a37cc..fb0bfa4 100644 --- a/glyphs/letters-unified-extended.aki +++ b/glyphs/letters-unified-extended.aki @@ -188,7 +188,7 @@ symbol-block 'Delta and cyrbe' flat.ai (RIGHTSB - OX) (XH - SMALLSMOOTHB) curl.ai (RIGHTSB - OX) SMALLSMOOTHA arcvh - g4 (MIDDLE + CORRECTION_OMIDX) O + g4 (MIDDLE + CORRECTION_OMIDS) O archv flat (SB + OX) SMALLSMOOTHB curl (SB + OX) (XH - SMALLSMOOTHA) @@ -284,7 +284,7 @@ symbol-block 'zeta and xi' include : dispiro widths.rhs g4 (RIGHTSB + O) (CAP - STROKE) - bezcontrols 0.7 0.35 1 0.64 + bezcontrols 0.7 0.35 1 0.64 12 g4.down.mid (SB + STROKE * CORRECTION_HX) [mix 0 CAP 0.27] arcvh g4 [mix SB RIGHTSB 0.55] STROKE @@ -389,7 +389,7 @@ symbol-block 'pi' alsothru 0.5 0.85 important g4 [mix SB RIGHTSB 0.1] O local m2 : mix SB RIGHTSB (1 - m) - local hook : HOOK * 0.8 + local hook : Math.max (STROKE * CORRECTION_HX * 1.1) (HOOK * 0.8) include : dispiro widths.center flat m2 XH [heading DOWNWARD] @@ -1055,12 +1055,14 @@ symbol-block 'CyrChe' create-glyph 'cyrChevbar' : glyph-construction assign-unicode 0x4B8 include glyphs.cyrChe AS_BASE - include : FlatSlashShape MIDDLE (CAP * [if SLAB 0.45 0.35] + STROKE * 0.1) (OVERLAYSTROKE / 2) 0 0.8 + local yc (CAP * [if SLAB 0.45 0.35] + STROKE * 0.1) + include : VBar MIDDLE (yc + LONGJUT * 0.8) (yc - LONGJUT * 0.8) OVERLAYSTROKE create-glyph 'cyrchevbar' : glyph-construction assign-unicode 0x4B9 include glyphs.cyrche AS_BASE - include : FlatSlashShape MIDDLE (XH * [if SLAB 0.45 0.4] + STROKE * 0.1) (OVERLAYSTROKE / 2) 0 0.8 + local yc (XH * [if SLAB 0.45 0.35] + STROKE * 0.1) + include : VBar MIDDLE (yc + LONGJUT * 0.8) (yc - LONGJUT * 0.8) OVERLAYSTROKE symbol-block 'CyrYu' define [CyrYuShape top sma smb] : glyph-construction @@ -1272,7 +1274,7 @@ symbol-block 'Digraphs' define aeepart : glyph-construction local eLeft : MIDDLE - MVERTSTROKE / 2 * CORRECTION_HX + 0.1 local eMiddle : [mix eLeft (RIGHTSB - OX * 2) 0.5] - MVERTSTROKE * globalTransform.yx - local barbottom (XH * EBARPOS) + local barbottom (XH * EBARPOS - HALFSTROKE) local sma : SMALLSMOOTHA * 0.6 local smb : SMALLSMOOTHB * 0.6 diff --git a/glyphs/numbers.aki b/glyphs/numbers.aki index 715d5b4..be3d0e0 100644 --- a/glyphs/numbers.aki +++ b/glyphs/numbers.aki @@ -171,7 +171,7 @@ symbol-block "Numbers" if SLAB : begin include : DownwardLeftSerif (SB + OXE) CAP VJUT - + local pr : linreg 18 0.85 120 0.975 STROKE create-glyph 'eight' : glyph-construction include capitalMarks set-width WIDTH @@ -185,15 +185,15 @@ symbol-block "Numbers" widths.rhs g4.right.mid (MIDDLE - CORRECTION_OMIDS) (CAP - O) archv - g4 [mix l r p] (CAP - SMOOTHB * p) + g4 [mix l r p] (CAP - SMOOTHB * pr * p) alsothru 0.5 0.5 [widths.center] - g4 (l) SMOOTHB [widths.lhs] + g4 (l) (SMOOTHB * pr) [widths.lhs] arcvh g4.right.mid (MIDDLE + CORRECTION_OMIDS) (O) archv - g4 (r) SMOOTHA [widths.lhs] + g4 (r) (SMOOTHA * pr) [widths.lhs] alsothru 0.5 0.5 [widths.center] - g4 [mix r l p] (CAP - SMOOTHA * p) [widths.rhs] + g4 [mix r l p] (CAP - SMOOTHA * pr * p) [widths.rhs] arcvh close @@ -207,11 +207,11 @@ symbol-block "Numbers" widths.lhs straight.up.start r 0 [heading UPWARD] alsothru 0.5 (1 - py) [widths (STROKE * py) (STROKE * (1 - py))] - g4 [mix r l p] (CAP - SMOOTHA * p) [widths.rhs] + g4 [mix r l p] (CAP - SMOOTHA * p * pr) [widths.rhs] arcvh g4 (MIDDLE - CORRECTION_OMIDS) (CAP - O) archv - g4 [mix l r p] (CAP - SMOOTHB * p) + g4 [mix l r p] (CAP - SMOOTHB * p * pr) alsothru 0.5 py [widths (STROKE * py) (STROKE * (1 - py))] straight.down.end l 0 [widths.heading STROKE 0 DOWNWARD] diff --git a/glyphs/symbol-other.aki b/glyphs/symbol-other.aki index 3a35675..20febc8 100644 --- a/glyphs/symbol-other.aki +++ b/glyphs/symbol-other.aki @@ -1,20 +1,22 @@ ###### Other symbols # IPA tonal marks symbol-block 'Phonetic Symbols' + local triangleSize : Math.min (PERIODRADIUS) (XH / 6) create-glyph 'trianglecolon' : glyph-construction assign-unicode 0x2D0 - start-from (MIDDLE - PERIODRADIUS * 1.35) XH - line-to MIDDLE (XH - PERIODRADIUS * 2.75) - line-to (MIDDLE + PERIODRADIUS * 1.35) XH - start-from (MIDDLE - PERIODRADIUS * 1.35) 0 - line-to MIDDLE (0 + PERIODRADIUS * 2.75) - line-to (MIDDLE + PERIODRADIUS * 1.35) 0 + start-from (MIDDLE - triangleSize * 1.35) XH + line-to MIDDLE (XH - triangleSize * 2.75) + line-to (MIDDLE + triangleSize * 1.35) XH + start-from (MIDDLE - triangleSize * 1.35) 0 + line-to MIDDLE (0 + triangleSize * 2.75) + line-to (MIDDLE + triangleSize * 1.35) 0 create-glyph 'halftrianglecolon' : glyph-construction assign-unicode 0x2D1 - start-from (MIDDLE - PERIODRADIUS * 1.35) XH - line-to MIDDLE (XH - PERIODRADIUS * 2.75) - line-to (MIDDLE + PERIODRADIUS * 1.35) XH + start-from (MIDDLE - triangleSize * 1.35) XH + line-to MIDDLE (XH - triangleSize * 2.75) + line-to (MIDDLE + triangleSize * 1.35) XH + foreach tone [range 4 downtill 0] : begin create-glyph ('tone' + tone) : glyph-construction assign-unicode (0x2E5 + 4 - tone) diff --git a/glyphs/symbol-punctuation.aki b/glyphs/symbol-punctuation.aki index 7b4c893..f946b63 100644 --- a/glyphs/symbol-punctuation.aki +++ b/glyphs/symbol-punctuation.aki @@ -337,7 +337,7 @@ symbol-block 'Typographic Symbols' alsothru 0.5 0.5 [widths HALFSTROKE HALFSTROKE] g4 RIGHTSB [mix bot top 0.501] [widths 0 STROKE] g4 RIGHTSB [mix bot top 0.5] [widths 0 STROKE] - g4 [mix SB RIGHTSB 0.6] [mix bot top : linreg 18 0.325 108 0.3 STROKE] + g4 [mix SB RIGHTSB 0.6] [mix bot top : [linreg 18 0.325 108 0.3 STROKE] * (1 - globalTransform.yx * 0.1)] include s include : FlipAround MIDDLE parenMid diff --git a/onegroup.mk b/onegroup.mk index 2c844e1..3bf7ecf 100644 --- a/onegroup.mk +++ b/onegroup.mk @@ -19,8 +19,8 @@ endif NODE_FDT = node --expose-gc NODE = node -UPRIGHT = $(OBJDIR)/$(PREFIX)-thin.ttf $(OBJDIR)/$(PREFIX)-extralight.ttf $(OBJDIR)/$(PREFIX)-light.ttf $(OBJDIR)/$(PREFIX)-regular.ttf $(OBJDIR)/$(PREFIX)-bold.ttf -ITALIC = $(OBJDIR)/$(PREFIX)-thinitalic.ttf $(OBJDIR)/$(PREFIX)-extralightitalic.ttf $(OBJDIR)/$(PREFIX)-lightitalic.ttf $(OBJDIR)/$(PREFIX)-italic.ttf $(OBJDIR)/$(PREFIX)-bolditalic.ttf +UPRIGHT = $(OBJDIR)/$(PREFIX)-thin.ttf $(OBJDIR)/$(PREFIX)-extralight.ttf $(OBJDIR)/$(PREFIX)-light.ttf $(OBJDIR)/$(PREFIX)-regular.ttf $(OBJDIR)/$(PREFIX)-bold.ttf $(OBJDIR)/$(PREFIX)-heavy.ttf +ITALIC = $(OBJDIR)/$(PREFIX)-thinitalic.ttf $(OBJDIR)/$(PREFIX)-extralightitalic.ttf $(OBJDIR)/$(PREFIX)-lightitalic.ttf $(OBJDIR)/$(PREFIX)-italic.ttf $(OBJDIR)/$(PREFIX)-bolditalic.ttf $(OBJDIR)/$(PREFIX)-heavyitalic.ttf EXTUPRG = EXTITAL = OUTPUTS = $(UPRIGHT) $(ITALIC) @@ -71,6 +71,10 @@ $(OBJDIR)/.pass0-$(PREFIX)-bold.fdt : $(SCRIPTS) | $(OBJDIR) $(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-bold s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(OBJDIR)/.pass0-$(PREFIX)-bolditalic.fdt : $(SCRIPTS) | $(OBJDIR) $(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-bold s-italic $(STYLE_ITALIC) $(STYLE_SUFFIX) +$(OBJDIR)/.pass0-$(PREFIX)-heavy.fdt : $(SCRIPTS) | $(OBJDIR) + $(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-heavy s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) +$(OBJDIR)/.pass0-$(PREFIX)-heavyitalic.fdt : $(SCRIPTS) | $(OBJDIR) + $(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-heavy s-italic $(STYLE_ITALIC) $(STYLE_SUFFIX) $(PASS0) : $(OBJDIR)/.pass0-%.ttf : $(OBJDIR)/.pass0-%.fdt $(NODE) extract --upm 16000 --uprightify 1 --ttf $@ $< diff --git a/parameters.toml b/parameters.toml index f82cd14..ed40090 100644 --- a/parameters.toml +++ b/parameters.toml @@ -141,7 +141,6 @@ jut = 90 vjut = 165 barpos = 0.51 -#ebarpos = 0.4 fivebarpos = 0.64 oxhook = -5 ahook = 120 @@ -149,10 +148,40 @@ rbalance = 50 rbalance2 = 25 rhook = 95 smooth = 210 +smallsmooth = 230 jbalance2 = 60 tbalance = 50 sbalance = 0.5 +[w-heavy] +isBold = true +weight = 900 +style = 'Heavy' + +sb = 42 +stroke = 120 +dotsize = 180 +periodsize = 200 +essx = 1.05 +jut = 95 +vjut = 170 + +barpos = 0.51 +fivebarpos = 0.64 +oxhook = -5 +ahook = 120 +rbalance = 50 +rbalance2 = 25 +rhook = 95 +smooth = 210 +smallsmooth = 230 +jbalance2 = 60 +tbalance = 50 +sbalance = 0.5 + +smallCrowd = 4 +smallCrowd2 = 4.25 + # Slants [s-upright] isItalic = false diff --git a/testdrive/index.html b/testdrive/index.html index 20cf47d..b3cfda6 100644 --- a/testdrive/index.html +++ b/testdrive/index.html @@ -50,15 +50,26 @@ } @font-face { font-family: IosevkaWEB; - font-weight: bold; + font-weight: 700; src: url('assets/iosevka-bold.woff') format('woff'), url('assets/iosevka-bold.ttf') format('truetype'); } @font-face { font-family: IosevkaWEB; font-style: italic; - font-weight: bold; + font-weight: 700; src: url('assets/iosevka-bolditalic.woff') format('woff'), url('assets/iosevka-bolditalic.ttf') format('truetype'); } + @font-face { + font-family: IosevkaWEB; + font-weight: 900; + src: url('assets/iosevka-heavy.woff') format('woff'), url('assets/iosevka-heavy.ttf') format('truetype'); + } + @font-face { + font-family: IosevkaWEB; + font-style: italic; + font-weight: 900; + src: url('assets/iosevka-heavyitalic.woff') format('woff'), url('assets/iosevka-heavyitalic.ttf') format('truetype'); + } @font-face { font-family: IosevkaSlabWEB; font-weight: 100; @@ -103,15 +114,26 @@ } @font-face { font-family: IosevkaSlabWEB; - font-weight: bold; + font-weight: 700; src: url('assets/iosevka-slab-bold.woff') format('woff'), url('assets/iosevka-slab-bold.ttf') format('truetype'); } @font-face { font-family: IosevkaSlabWEB; font-style: italic; - font-weight: bold; + font-weight: 700; src: url('assets/iosevka-slab-bolditalic.woff') format('woff'), url('assets/iosevka-slab-bolditalic.ttf') format('truetype'); } + @font-face { + font-family: IosevkaSlabWEB; + font-weight: 900; + src: url('assets/iosevka-slab-heavy.woff') format('woff'), url('assets/iosevka-slab-heavy.ttf') format('truetype'); + } + @font-face { + font-family: IosevkaSlabWEB; + font-style: italic; + font-weight: 900; + src: url('assets/iosevka-slab-heavyitalic.woff') format('woff'), url('assets/iosevka-slab-heavyitalic.ttf') format('truetype'); + } a { color: black; background-image: linear-gradient(white 50%, #888 50%); @@ -152,6 +174,7 @@ .extralight { font-weight: 200 } .light { font-weight: 300 } .bold { font-weight: 700 } + .heavy { font-weight: 900 } .italic { font-style: italic } .show table.block { width: 68rem; @@ -328,7 +351,9 @@ [ {name: 'iosevka-regular', cls: '', display: 'Iosevka'}, {name: 'iosevka-slab-regular', cls: 'slab', display: 'Iosevka Slab'}, {name: 'iosevka-italic', cls:'italic', display: 'Iosevka Italic'}, {name: 'iosevka-slab-italic', cls:'slab italic', display: 'Iosevka Slab Italic'} ], [ {name: 'iosevka-bold', cls: 'bold', display: 'Iosevka Bold'}, {name: 'iosevka-slab-bold', cls: 'slab bold', display: 'Iosevka Slab Bold'}, - {name: 'iosevka-bolditalic', cls:'bold italic', display: 'Iosevka Bold Italic'}, {name: 'iosevka-slab-bolditalic', cls:'slab bold italic', display: 'Iosevka Slab Bold Italic'} ] + {name: 'iosevka-bolditalic', cls:'bold italic', display: 'Iosevka Bold Italic'}, {name: 'iosevka-slab-bolditalic', cls:'slab bold italic', display: 'Iosevka Slab Bold Italic'} ], + [ {name: 'iosevka-heavy', cls: 'heavy', display: 'Iosevka Heavy'}, {name: 'iosevka-slab-heavy', cls: 'slab heavy', display: 'Iosevka Slab Heavy'}, + {name: 'iosevka-heavyitalic', cls:'heavy italic', display: 'Iosevka Heavy Italic'}, {name: 'iosevka-slab-heavyitalic', cls:'slab heavy italic', display: 'Iosevka Slab Heavy Italic'} ] ]; var REGULAR = 3; var lipsums = ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur semper ipsum quam, at molestie libero euismod vitae. Etiam vehicula felis mi, et ultricies libero consequat at. Donec consequat, nunc id elementum tempor, lectus orci vulputate leo, eget lobortis lectus nulla sed orci. Donec in dolor non orci aliquet gravida. Nulla volutpat magna et nulla pretium, quis consequat nibh euismod. Suspendisse eget metus enim. Fusce vulputate scelerisque eros et consequat. Quisque dapibus accumsan augue, et semper lectus vehicula sit amet. Ut ornare venenatis tortor, non gravida tellus mattis interdum. In hac habitasse platea dictumst. Donec interdum commodo ex eu tincidunt. Curabitur non fermentum enim. Proin luctus orci ut commodo auctor. Pellentesque accumsan id sem eu semper. Sed non pharetra nibh. Vivamus mattis luctus arcu, a rutrum dui venenatis sit amet. aja ojo ojoined',