Add earless variants for m
(#669)
This commit is contained in:
parent
295e87660a
commit
0dcbd316c7
7 changed files with 355 additions and 57 deletions
29
README.md
29
README.md
|
@ -195,7 +195,7 @@ Since version 2.0, Iosevka would no longer support building via `makefile`. To i
|
||||||
|
|
||||||
|
|
||||||
<!-- END Section-Private-Build-Plan-Sample -->
|
<!-- END Section-Private-Build-Plan-Sample -->
|
||||||
|
|
||||||
|
|
||||||
3. Run `npm run build -- contents::<your plan name>` and the built fonts would be avaliable in `dist/`. Aside from `contents::<plan>`, other options are:
|
3. Run `npm run build -- contents::<your plan name>` and the built fonts would be avaliable in `dist/`. Aside from `contents::<plan>`, other options are:
|
||||||
|
|
||||||
|
@ -320,6 +320,8 @@ The current available styles for `design`/`upright`/`italic`/`oblique` options a
|
||||||
* `v-a-singlestorey-earless-corner-tailed`, `VXCM`: Earless (cornered top-right) single-storey `a` with curly tail.
|
* `v-a-singlestorey-earless-corner-tailed`, `VXCM`: Earless (cornered top-right) single-storey `a` with curly tail.
|
||||||
* `v-a-singlestorey-earless-rounded`, `VXCN`: Earless (rounded top-right) single-storey `a`.
|
* `v-a-singlestorey-earless-rounded`, `VXCN`: Earless (rounded top-right) single-storey `a`.
|
||||||
* `v-a-singlestorey-earless-rounded-tailed`, `VXCO`: Earless (rounded top-right) single-storey `a` with curly tail.
|
* `v-a-singlestorey-earless-rounded-tailed`, `VXCO`: Earless (rounded top-right) single-storey `a` with curly tail.
|
||||||
|
* `v-a-doublestorey-toothless-corner`, `VXDM`: Toothless (cornered bottom-right) double-storey `a`.
|
||||||
|
* `v-a-doublestorey-toothless-rounded`, `VXDN`: Toothless (rounded bottom-right) double-storey `a`.
|
||||||
* Styles for `b`:
|
* Styles for `b`:
|
||||||
* `v-b-toothed`, `VXBK`: `b` with bottom-left tooth (default).
|
* `v-b-toothed`, `VXBK`: `b` with bottom-left tooth (default).
|
||||||
* `v-b-toothless-corner`, `VXBL`: `b` without bottom-left tooth, with a corner transition.
|
* `v-b-toothless-corner`, `VXBL`: `b` without bottom-left tooth, with a corner transition.
|
||||||
|
@ -352,6 +354,7 @@ The current available styles for `design`/`upright`/`italic`/`oblique` options a
|
||||||
* `v-i-line`, `cv56`: `i` like a straight line.
|
* `v-i-line`, `cv56`: `i` like a straight line.
|
||||||
* `v-i-tailed`, `cv88`: Tailed `i`.
|
* `v-i-tailed`, `cv88`: Tailed `i`.
|
||||||
* `v-i-hookybottom`, `VXAA`: `i` with a straight tail.
|
* `v-i-hookybottom`, `VXAA`: `i` with a straight tail.
|
||||||
|
* `v-i-serifed-asymmetric`, `VXDK`: `i` with shorter top serif and full bottom serif.
|
||||||
* Styles for `j`:
|
* Styles for `j`:
|
||||||
* `v-j-line`, `cv57`: `j` like a straight line.
|
* `v-j-line`, `cv57`: `j` like a straight line.
|
||||||
* `v-j-serifed`, `cv58`: `j` with top serif (default).
|
* `v-j-serifed`, `cv58`: `j` with top serif (default).
|
||||||
|
@ -371,15 +374,31 @@ The current available styles for `design`/`upright`/`italic`/`oblique` options a
|
||||||
* `v-l-tailed`, `cv27`: `l` with a curved tail.
|
* `v-l-tailed`, `cv27`: `l` with a curved tail.
|
||||||
* `v-l-hookybottom`, `cv28`: `l` with a straight tail.
|
* `v-l-hookybottom`, `cv28`: `l` with a straight tail.
|
||||||
* `v-l-line`, `cv59`: `l` like a straight line.
|
* `v-l-line`, `cv59`: `l` like a straight line.
|
||||||
* `v-l-serifed-asymmetric`, `VXDL`: Serifed `l` with shorter top serif.
|
* `v-l-serifed-asymmetric`, `VXDL`: `l` with shorter top serif and full bottom serif.
|
||||||
* Styles for `m`:
|
* Styles for `m`:
|
||||||
* `v-m-normal`, `cv25`: `m` with normal middle leg, touching the baseline (default).
|
* `v-m-normal`, `cv25`: `m` with normal middle leg, touching the baseline (default).
|
||||||
* `v-m-shortleg`, `cv26`: `m` with shorter middle leg, like Ubuntu Mono.
|
* `v-m-shortleg`, `cv26`: `m` with shorter middle leg, like Ubuntu Mono.
|
||||||
* `v-m-tailed`, `VXCD`: `m` with normal middle leg, touching the baseline, and a curly tail.
|
* `v-m-tailed`, `VXCD`: `m` with normal middle leg, touching the baseline, and a curly tail.
|
||||||
* `v-m-shortleg-tailed`, `VXCE`: `m` with shorter middle leg, like Ubuntu Mono, and a curly tail.
|
* `v-m-shortleg-tailed`, `VXCE`: `m` with shorter middle leg, like Ubuntu Mono, and a curly tail.
|
||||||
|
* `v-m-earless-corner-double-arch`, `VXDU`: Earless (corner top-left) `m` with normal middle leg touching baseline.
|
||||||
|
* `v-m-earless-corner-double-arch-shortleg`, `VXDV`: Earless (corner top-left) `m` with a shorter middle leg like Ubuntu Mono.
|
||||||
|
* `v-m-earless-corner-double-arch-tailed`, `VXDW`: Earless (corner top-left) `m` with normal middle leg touching baseline, and a curly tail.
|
||||||
|
* `v-m-earless-corner-double-arch-shortleg-tailed`, `VXDX`: Earless (corner top-left) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail.
|
||||||
|
* `v-m-earless-rounded-double-arch`, `VXDY`: Earless (rounded top-left) `m` with normal middle leg touching baseline.
|
||||||
|
* `v-m-earless-rounded-double-arch-shortleg`, `VXDZ`: Earless (rounded top-left) `m` with a shorter middle leg like Ubuntu Mono.
|
||||||
|
* `v-m-earless-rounded-double-arch-tailed`, `VXEA`: Earless (rounded top-left) `m` with normal middle leg touching baseline, and a curly tail.
|
||||||
|
* `v-m-earless-rounded-double-arch-shortleg-tailed`, `VXEB`: Earless (rounded top-left) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail.
|
||||||
|
* `v-m-earless-single-arch`, `VXEC`: Earless (single-arch) `m` with normal middle leg touching baseline.
|
||||||
|
* `v-m-earless-single-arch-shortleg`, `VXED`: Earless (single-arch) `m` with a shorter middle leg like Ubuntu Mono.
|
||||||
|
* `v-m-earless-single-arch-tailed`, `VXEE`: Earless (single-arch) `m` with normal middle leg touching baseline, and a curly tail.
|
||||||
|
* `v-m-earless-single-arch-shortleg-tailed`, `VXEF`: Earless (single-arch) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail.
|
||||||
* Styles for `n`:
|
* Styles for `n`:
|
||||||
* `v-n-straight`, `VXCF`: `n` straight ending (default).
|
* `v-n-straight`, `VXCF`: `n` with straight ending (default).
|
||||||
* `v-n-tailed`, `VXCG`: `n` a curly tail.
|
* `v-n-tailed`, `VXCG`: `n` with a curly tail.
|
||||||
|
* `v-n-earless-corner-straight`, `VXDO`: Earless (corner top-left) `n` with straight ending.
|
||||||
|
* `v-n-earless-corner-tailed`, `VXDP`: Earless (corner top-left) `n` with a curly tail.
|
||||||
|
* `v-n-earless-rounded-straight`, `VXDQ`: Earless (rounded top-left) `n` with straight ending.
|
||||||
|
* `v-n-earless-rounded-tailed`, `VXDR`: Earless (rounded top-left) `n` with a curly tail.
|
||||||
* Styles for `p`:
|
* Styles for `p`:
|
||||||
* `v-p-eared`, `VXCP`: `p` with top-left ear (default).
|
* `v-p-eared`, `VXCP`: `p` with top-left ear (default).
|
||||||
* `v-p-earless-corner`, `VXCQ`: `p` without top-left ear (corner).
|
* `v-p-earless-corner`, `VXCQ`: `p` without top-left ear (corner).
|
||||||
|
@ -395,6 +414,8 @@ The current available styles for `design`/`upright`/`italic`/`oblique` options a
|
||||||
* `v-r-straight`, `cv85`: Straight, serif-less `r` (default for Sans).
|
* `v-r-straight`, `cv85`: Straight, serif-less `r` (default for Sans).
|
||||||
* `v-r-serifed`, `cv86`: `r` with serif at both top and bottom (default for Slab Upright).
|
* `v-r-serifed`, `cv86`: `r` with serif at both top and bottom (default for Slab Upright).
|
||||||
* `v-r-top-serifed`, `cv87`: `r` with serifs at top-left only (default for Slab Italic).
|
* `v-r-top-serifed`, `cv87`: `r` with serifs at top-left only (default for Slab Italic).
|
||||||
|
* `v-r-earless-corner`, `VXDS`: Earless (corner top-left), serif-less `r`.
|
||||||
|
* `v-r-earless-rounded`, `VXDT`: Earless (rounded top-left), serif-less `r`.
|
||||||
* Styles for `t`:
|
* Styles for `t`:
|
||||||
* `v-t-standard`, `cv40`: Standard `t` shape (default).
|
* `v-t-standard`, `cv40`: Standard `t` shape (default).
|
||||||
* `v-t-cross`, `cv41`: Futura-like `t` shape.
|
* `v-t-cross`, `cv41`: Futura-like `t` shape.
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
* Add toothless variant for `a` (#669).
|
* Add toothless variant for `a` (#669).
|
||||||
* Add earless variants for `n`, `r` (#669).
|
* Add earless variants for `m`, `n`, `r` (#669).
|
|
@ -4182,81 +4182,108 @@ glyph-block Letter-Latin-Upper-M : begin
|
||||||
glyph-block Letter-Latin-Lower-M : begin
|
glyph-block Letter-Latin-Lower-M : begin
|
||||||
glyph-block-import CommonShapes
|
glyph-block-import CommonShapes
|
||||||
glyph-block-import Common-Derivatives
|
glyph-block-import Common-Derivatives
|
||||||
glyph-block-import Letter-Shared-Shapes : RightwardTailedBar
|
glyph-block-import Letter-Shared-Shapes : RightwardTailedBar DToothlessRise DMBlend
|
||||||
|
|
||||||
define [SmallMShoulderSpiro] : params [left right top bottom width fine diversity] : glyph-proc
|
define [SmallMSmooth df] : df.div * (0.5 * SmallSmooth + 0.375 * Stroke)
|
||||||
|
define [SmallMShoulderSpiro] : params [left right top bottom width fine df coBottom] : glyph-proc
|
||||||
local fix : TanSlope * Stroke * HVContrast * width / Stroke
|
local fix : TanSlope * Stroke * HVContrast * width / Stroke
|
||||||
local sm : SmallSmooth * 0.7 * [fallback diversity 1]
|
local sm : [SmallMSmooth df] + fix / 2
|
||||||
include : spiro-outline
|
include : spiro-outline
|
||||||
corner (right - width * HVContrast) bottom
|
corner (right - width * HVContrast) [Math.min (top - sm - 0.1) bottom]
|
||||||
curl (right - width * HVContrast) (top - sm + fix)
|
curl (right - width * HVContrast) (top - sm + fix)
|
||||||
arcvh 8
|
arcvh 8
|
||||||
g2 [mix left (right - width * HVContrast) 0.5] (top - O - width)
|
g2 [mix left (right - width * HVContrast) 0.5] (top - O - width)
|
||||||
archv 8
|
archv 8
|
||||||
flat left (top - sm - fix)
|
flat left (top - sm - fix)
|
||||||
corner left (top - sm - fix - 1)
|
corner left (top - sm - fix - 1)
|
||||||
|
if (coBottom != nothing)
|
||||||
|
list [corner left coBottom] [corner (left - fine) coBottom]
|
||||||
|
list
|
||||||
corner (left - fine) (top - sm - 1)
|
corner (left - fine) (top - sm - 1)
|
||||||
curl (left - fine) (top - sm)
|
curl (left - fine) (top - sm)
|
||||||
arcvh 8
|
arcvh 8
|
||||||
g2 [mix (left - fine * HVContrast) right 0.5] (top - O)
|
g2 [mix (left - fine * HVContrast) right 0.5] (top - O)
|
||||||
archv 8
|
archv 8
|
||||||
flat right (top - sm)
|
flat right (top - sm)
|
||||||
corner right bottom
|
corner right [Math.min (top - sm - 0.1) bottom]
|
||||||
close
|
close
|
||||||
|
|
||||||
|
define [RevSmallMShoulderSpiro] : params [left right top bottom width fine df coBottom] : glyph-proc
|
||||||
|
local fix : TanSlope * Stroke * HVContrast * width / Stroke
|
||||||
|
local sm : [SmallMSmooth df] - fix / 2
|
||||||
|
include : spiro-outline
|
||||||
|
corner (left + width * HVContrast) [Math.min (top - sm - 0.1) bottom]
|
||||||
|
curl (left + width * HVContrast) (top - sm - fix)
|
||||||
|
arcvh 8
|
||||||
|
g2 [mix right (left + width * HVContrast) 0.5] (top - O - width)
|
||||||
|
archv 8
|
||||||
|
flat right (top - sm - fix)
|
||||||
|
corner right (top - sm - fix - 1)
|
||||||
|
if (coBottom != nothing)
|
||||||
|
list [corner right coBottom] [corner (right + fine) coBottom]
|
||||||
|
list
|
||||||
|
corner (right + fine) (top - sm - 1)
|
||||||
|
curl (right + fine) (top - sm)
|
||||||
|
arcvh 8
|
||||||
|
g2 [mix (right + fine * HVContrast) left 0.5] (top - O)
|
||||||
|
archv 8
|
||||||
|
flat left (top - sm)
|
||||||
|
corner left [Math.min (top - sm - 0.1) bottom]
|
||||||
|
close
|
||||||
|
|
||||||
|
define [SmallMSerifs top lbot mbot rbot df tailed earless] : glyph-proc
|
||||||
|
local jut : Jut * df.mvs / Stroke + O
|
||||||
|
if (df.width > jut * 7) : begin
|
||||||
|
if [not earless] : include : tagged 'serifLT' : intersection
|
||||||
|
CenterTopSerif (df.leftSB + 0.5 * df.mvs * HVContrast) top jut df.mvs
|
||||||
|
spiro-outline
|
||||||
|
corner SB lbot
|
||||||
|
corner SB top
|
||||||
|
corner 0 top
|
||||||
|
corner 0 lbot
|
||||||
|
if (!para.isItalic) : begin
|
||||||
|
include : tagged 'serifLB' : CenterBottomSerif (df.leftSB + 0.5 * df.mvs * HVContrast) lbot jut df.mvs
|
||||||
|
include : tagged 'serifMB' : CenterBottomSerif df.middle mbot jut df.mvs
|
||||||
|
if [not tailed] : begin
|
||||||
|
include : tagged 'serifRB' : CenterBottomSerif (df.rightSB - 0.5 * df.mvs * HVContrast) rbot jut df.mvs
|
||||||
|
: else : if [not tailed] : begin
|
||||||
|
include : tagged 'serifRB' : intersection
|
||||||
|
RightwardBottomSerif (df.rightSB + O) rbot (jut / 2) df.mvs
|
||||||
|
spiro-outline
|
||||||
|
corner (df.rightSB + O) lbot
|
||||||
|
corner (df.rightSB + O) top
|
||||||
|
corner df.width top
|
||||||
|
corner df.lwidth lbot
|
||||||
|
: else : begin
|
||||||
|
include : tagged 'serifLT' : LeftwardTopSerif df.leftSB top SideJut df.mvs
|
||||||
|
if (!para.isItalic) : include : LeftwardBottomSerif df.leftSB lbot SideJut df.mvs
|
||||||
|
if [not tailed] : begin
|
||||||
|
include : tagged 'serifRB' : RightwardBottomSerif df.rightSB rbot SideJut df.mvs
|
||||||
|
|
||||||
define [dfM] : DivFrame para.diversityM 3
|
define [dfM] : DivFrame para.diversityM 3
|
||||||
define [SmallMShape top lbot mbot rbot df tailed] : glyph-proc
|
define [SmallMShape top lbot mbot rbot df tailed] : glyph-proc
|
||||||
local m1 : mix df.leftSB (df.middle + df.mvs / 2 * HVContrast) 0.5
|
|
||||||
local m2 : mix df.rightSB (df.middle - df.mvs / 2 * HVContrast) 0.5
|
|
||||||
include : SmallMShoulderSpiro
|
include : SmallMShoulderSpiro
|
||||||
|
df -- df
|
||||||
left -- (df.leftSB + df.mvs * HVContrast)
|
left -- (df.leftSB + df.mvs * HVContrast)
|
||||||
right -- (df.middle + df.mvs / 2 * HVContrast)
|
right -- (df.middle + df.mvs / 2 * HVContrast)
|
||||||
top -- top
|
top -- top
|
||||||
bottom -- mbot
|
bottom -- mbot
|
||||||
width -- df.mvs
|
width -- df.mvs
|
||||||
fine -- (df.mvs * ShoulderFine / Stroke)
|
fine -- (df.mvs * ShoulderFine / Stroke)
|
||||||
diversity -- df.div
|
|
||||||
include : SmallMShoulderSpiro
|
include : SmallMShoulderSpiro
|
||||||
|
df -- df
|
||||||
left -- (df.middle + df.mvs * 0.5 * HVContrast)
|
left -- (df.middle + df.mvs * 0.5 * HVContrast)
|
||||||
right -- df.rightSB
|
right -- df.rightSB
|
||||||
top -- top
|
top -- top
|
||||||
bottom -- rbot
|
bottom -- rbot
|
||||||
width -- df.mvs
|
width -- df.mvs
|
||||||
fine -- (df.mvs * ShoulderFine / Stroke)
|
fine -- (df.mvs * ShoulderFine / Stroke)
|
||||||
diversity -- df.div
|
|
||||||
include : tagged 'barL' : VBarLeft df.leftSB lbot top df.mvs
|
include : tagged 'barL' : VBarLeft df.leftSB lbot top df.mvs
|
||||||
if SLAB : begin
|
if SLAB : include : SmallMSerifs top lbot mbot rbot df tailed true
|
||||||
local jut : Jut * df.mvs / Stroke + O
|
|
||||||
if (df.width > jut * 7) : begin
|
|
||||||
include : tagged 'serifLT' : intersection
|
|
||||||
CenterTopSerif (df.leftSB + 0.5 * df.mvs * HVContrast) top jut df.mvs
|
|
||||||
spiro-outline
|
|
||||||
corner SB lbot
|
|
||||||
corner SB top
|
|
||||||
corner 0 top
|
|
||||||
corner 0 lbot
|
|
||||||
if (!para.isItalic) : begin
|
|
||||||
include : tagged 'serifLB' : CenterBottomSerif (df.leftSB + 0.5 * df.mvs * HVContrast) lbot jut df.mvs
|
|
||||||
include : tagged 'serifMB' : CenterBottomSerif df.middle mbot jut df.mvs
|
|
||||||
if [not tailed] : begin
|
|
||||||
include : tagged 'serifRB' : CenterBottomSerif (df.rightSB - 0.5 * df.mvs * HVContrast) rbot jut df.mvs
|
|
||||||
: else : if [not tailed] : begin
|
|
||||||
include : tagged 'serifRB' : intersection
|
|
||||||
RightwardBottomSerif (df.rightSB + O) rbot (jut / 2) df.mvs
|
|
||||||
spiro-outline
|
|
||||||
corner (df.rightSB + O) lbot
|
|
||||||
corner (df.rightSB + O) top
|
|
||||||
corner df.width top
|
|
||||||
corner df.lwidth lbot
|
|
||||||
: else : begin
|
|
||||||
include : tagged 'serifLT' : LeftwardTopSerif df.leftSB top SideJut df.mvs
|
|
||||||
if (!para.isItalic) : include : LeftwardBottomSerif df.leftSB lbot SideJut df.mvs
|
|
||||||
if [not tailed] : begin
|
|
||||||
include : tagged 'serifRB' : RightwardBottomSerif df.rightSB rbot SideJut df.mvs
|
|
||||||
|
|
||||||
define [SmallMShortLegHeight df] : (XH - df.mvs) * 0.45
|
define [SmallMShortLegHeight df] : (XH - df.mvs) * 0.45
|
||||||
glyph-block-export SmallMSmoothHeight
|
glyph-block-export SmallMSmoothHeight
|
||||||
define [SmallMSmoothHeight df] : XH - SmallSmoothB * 0.7 * df.div
|
define [SmallMSmoothHeight df] : XH - [SmallMSmooth df] - TanSlope * Stroke
|
||||||
|
|
||||||
create-glyph 'm.normal' : glyph-proc
|
create-glyph 'm.normal' : glyph-proc
|
||||||
local df : dfM
|
local df : dfM
|
||||||
|
@ -4285,6 +4312,139 @@ glyph-block Letter-Latin-Lower-M : begin
|
||||||
include : SmallMShape XH 0 [SmallMShortLegHeight df] ([SmallMSmoothHeight df] + O) df true
|
include : SmallMShape XH 0 [SmallMShortLegHeight df] ([SmallMSmoothHeight df] + O) df true
|
||||||
include : RightwardTailedBar df.rightSB 0 [SmallMSmoothHeight df] (sw -- df.mvs)
|
include : RightwardTailedBar df.rightSB 0 [SmallMSmoothHeight df] (sw -- df.mvs)
|
||||||
|
|
||||||
|
|
||||||
|
define [EarlessCornerDoubleArchSmallMShape top lbot mbot rbot df tailed] : glyph-proc
|
||||||
|
include : dispiro
|
||||||
|
widths.rhs df.mvs
|
||||||
|
g4 df.leftSB (top - DToothlessRise)
|
||||||
|
g4.right.mid [mix df.leftSB (df.middle + df.mvs / 2 * HVContrast) 0.5] (top - O) [heading Rightward]
|
||||||
|
g4 (df.middle + df.mvs / 2 * HVContrast) (top - DToothlessRise)
|
||||||
|
include : dispiro
|
||||||
|
widths.rhs df.mvs
|
||||||
|
g4 (df.middle - df.mvs / 2 * HVContrast) (top - DToothlessRise)
|
||||||
|
g4.right.mid [mix df.rightSB (df.middle - df.mvs / 2 * HVContrast) 0.5] (top - O) [heading Rightward]
|
||||||
|
archv
|
||||||
|
flat df.rightSB (top - [SmallMSmooth df]) [heading Downward]
|
||||||
|
curl df.rightSB rbot [heading Downward]
|
||||||
|
|
||||||
|
include : tagged 'barL' : VBarLeft df.leftSB lbot (top - DToothlessRise) df.mvs
|
||||||
|
include : tagged 'barM' : VBar df.middle mbot (top - DToothlessRise) df.mvs
|
||||||
|
|
||||||
|
create-glyph 'm.earlessCornerDoubleArch' : glyph-proc
|
||||||
|
local df : dfM
|
||||||
|
set-width df.width
|
||||||
|
include df.markSet.e
|
||||||
|
include : EarlessCornerDoubleArchSmallMShape XH 0 0 0 df
|
||||||
|
|
||||||
|
create-glyph 'm.earlessCornerDoubleArchShortleg' : glyph-proc
|
||||||
|
local df : dfM
|
||||||
|
set-width df.width
|
||||||
|
include df.markSet.e
|
||||||
|
include : EarlessCornerDoubleArchSmallMShape XH 0 [SmallMShortLegHeight df] 0 df
|
||||||
|
|
||||||
|
create-glyph 'm.earlessCornerDoubleArchTailed' : glyph-proc
|
||||||
|
local df : dfM
|
||||||
|
set-width df.width
|
||||||
|
include df.markSet.e
|
||||||
|
include : EarlessCornerDoubleArchSmallMShape XH 0 0 ([SmallMSmoothHeight df] + O) df true
|
||||||
|
include : RightwardTailedBar df.rightSB 0 [SmallMSmoothHeight df] (sw -- df.mvs)
|
||||||
|
|
||||||
|
create-glyph 'm.earlessCornerDoubleArchShortlegTailed' : glyph-proc
|
||||||
|
local df : dfM
|
||||||
|
set-width df.width
|
||||||
|
include df.markSet.e
|
||||||
|
include : EarlessCornerDoubleArchSmallMShape XH 0 [SmallMShortLegHeight df] ([SmallMSmoothHeight df] + O) df true
|
||||||
|
include : RightwardTailedBar df.rightSB 0 [SmallMSmoothHeight df] (sw -- df.mvs)
|
||||||
|
|
||||||
|
define [EarlessRoundedDoubleArchSmallMShape top lbot mbot rbot df tailed] : glyph-proc
|
||||||
|
include : union
|
||||||
|
RevSmallMShoulderSpiro
|
||||||
|
df -- df
|
||||||
|
left -- df.leftSB
|
||||||
|
right -- (df.middle - df.mvs / 2 * HVContrast)
|
||||||
|
top -- top
|
||||||
|
bottom -- lbot
|
||||||
|
coBottom -- mbot
|
||||||
|
width -- df.mvs
|
||||||
|
fine -- (df.mvs * CThin)
|
||||||
|
SmallMShoulderSpiro
|
||||||
|
df -- df
|
||||||
|
left -- (df.middle + df.mvs * 0.5 * HVContrast)
|
||||||
|
right -- df.rightSB
|
||||||
|
top -- top
|
||||||
|
bottom -- rbot
|
||||||
|
coBottom -- mbot
|
||||||
|
width -- df.mvs
|
||||||
|
fine -- (df.mvs * CThin)
|
||||||
|
|
||||||
|
if SLAB : include : SmallMSerifs top lbot mbot rbot df tailed true
|
||||||
|
|
||||||
|
create-glyph 'm.earlessRoundedDoubleArch' : glyph-proc
|
||||||
|
local df : dfM
|
||||||
|
set-width df.width
|
||||||
|
include df.markSet.e
|
||||||
|
include : EarlessRoundedDoubleArchSmallMShape XH 0 0 0 df
|
||||||
|
|
||||||
|
create-glyph 'm.earlessRoundedDoubleArchShortleg' : glyph-proc
|
||||||
|
local df : dfM
|
||||||
|
set-width df.width
|
||||||
|
include df.markSet.e
|
||||||
|
include : EarlessRoundedDoubleArchSmallMShape XH 0 [SmallMShortLegHeight df] 0 df
|
||||||
|
|
||||||
|
create-glyph 'm.earlessRoundedDoubleArchTailed' : glyph-proc
|
||||||
|
local df : dfM
|
||||||
|
set-width df.width
|
||||||
|
include df.markSet.e
|
||||||
|
include : EarlessRoundedDoubleArchSmallMShape XH 0 0 ([SmallMSmoothHeight df] + O) df true
|
||||||
|
include : RightwardTailedBar df.rightSB 0 [SmallMSmoothHeight df] (sw -- df.mvs)
|
||||||
|
|
||||||
|
create-glyph 'm.earlessRoundedDoubleArchShortlegTailed' : glyph-proc
|
||||||
|
local df : dfM
|
||||||
|
set-width df.width
|
||||||
|
include df.markSet.e
|
||||||
|
include : EarlessRoundedDoubleArchSmallMShape XH 0 [SmallMShortLegHeight df] ([SmallMSmoothHeight df] + O) df true
|
||||||
|
include : RightwardTailedBar df.rightSB 0 [SmallMSmoothHeight df] (sw -- df.mvs)
|
||||||
|
|
||||||
|
|
||||||
|
define [EarlessSingleArchSmallMShape top lbot mbot rbot df tailed] : glyph-proc
|
||||||
|
include : tagged 'barL' : VBarLeft df.leftSB lbot (XH - DToothlessRise) df.mvs
|
||||||
|
include : tagged 'barM' : VBar df.middle mbot XH df.mvs
|
||||||
|
include : dispiro
|
||||||
|
widths.rhs df.mvs
|
||||||
|
g4 df.leftSB (XH - DToothlessRise)
|
||||||
|
g4 (df.middle - CorrectionOMidS) (XH - O)
|
||||||
|
archv
|
||||||
|
flat df.rightSB [Math.max (XH - [SmallMSmooth df]) (rbot + 0.1)]
|
||||||
|
curl df.rightSB rbot [heading Downward]
|
||||||
|
|
||||||
|
if SLAB : include : SmallMSerifs top lbot mbot rbot df tailed true
|
||||||
|
|
||||||
|
create-glyph 'm.earlessSingleArch' : glyph-proc
|
||||||
|
local df : dfM
|
||||||
|
set-width df.width
|
||||||
|
include df.markSet.e
|
||||||
|
include : EarlessSingleArchSmallMShape XH 0 0 0 df
|
||||||
|
|
||||||
|
create-glyph 'm.earlessSingleArchShortleg' : glyph-proc
|
||||||
|
local df : dfM
|
||||||
|
set-width df.width
|
||||||
|
include df.markSet.e
|
||||||
|
include : EarlessSingleArchSmallMShape XH 0 [SmallMShortLegHeight df] 0 df
|
||||||
|
|
||||||
|
create-glyph 'm.earlessSingleArchTailed' : glyph-proc
|
||||||
|
local df : dfM
|
||||||
|
set-width df.width
|
||||||
|
include df.markSet.e
|
||||||
|
include : EarlessSingleArchSmallMShape XH 0 0 ([SmallMSmoothHeight df] + O) df true
|
||||||
|
include : RightwardTailedBar df.rightSB 0 [SmallMSmoothHeight df] (sw -- df.mvs)
|
||||||
|
|
||||||
|
create-glyph 'm.earlessSingleArchShortlegTailed' : glyph-proc
|
||||||
|
local df : dfM
|
||||||
|
set-width df.width
|
||||||
|
include df.markSet.e
|
||||||
|
include : EarlessSingleArchSmallMShape XH 0 [SmallMShortLegHeight df] ([SmallMSmoothHeight df] + O) df true
|
||||||
|
include : RightwardTailedBar df.rightSB 0 [SmallMSmoothHeight df] (sw -- df.mvs)
|
||||||
|
|
||||||
select-variant 'm' 'm'
|
select-variant 'm' 'm'
|
||||||
alias 'cyrl/te.italicNormal' null 'm.normal'
|
alias 'cyrl/te.italicNormal' null 'm.normal'
|
||||||
alias 'cyrl/te.italicTailed' null 'm.tailed'
|
alias 'cyrl/te.italicTailed' null 'm.tailed'
|
||||||
|
|
|
@ -493,6 +493,103 @@ variant.m = 'shortlegTailed'
|
||||||
variantUpright."cyrl/te" = "upright"
|
variantUpright."cyrl/te" = "upright"
|
||||||
variantItalic."cyrl/te" = "italicTailed"
|
variantItalic."cyrl/te" = "italicTailed"
|
||||||
|
|
||||||
|
[simple.v-m-earless-corner-double-arch]
|
||||||
|
tag = "VXDU"
|
||||||
|
sampler = "m"
|
||||||
|
description = "Earless (corner top-left) `m` with normal middle leg touching baseline"
|
||||||
|
variant.m = 'earlessCornerDoubleArch'
|
||||||
|
variantUpright."cyrl/te" = "upright"
|
||||||
|
variantItalic."cyrl/te" = "italicNormal"
|
||||||
|
|
||||||
|
[simple.v-m-earless-corner-double-arch-shortleg]
|
||||||
|
tag = "VXDV"
|
||||||
|
sampler = "m"
|
||||||
|
description = "Earless (corner top-left) `m` with a shorter middle leg like Ubuntu Mono"
|
||||||
|
variant.m = 'earlessCornerDoubleArchShortleg'
|
||||||
|
variantUpright."cyrl/te" = "upright"
|
||||||
|
variantItalic."cyrl/te" = "italicNormal"
|
||||||
|
|
||||||
|
[simple.v-m-earless-corner-double-arch-tailed]
|
||||||
|
tag = "VXDW"
|
||||||
|
sampler = "m"
|
||||||
|
description = "Earless (corner top-left) `m` with normal middle leg touching baseline, and a curly tail"
|
||||||
|
variant.m = 'earlessCornerDoubleArchTailed'
|
||||||
|
variantUpright."cyrl/te" = "upright"
|
||||||
|
variantItalic."cyrl/te" = "italicNormal"
|
||||||
|
|
||||||
|
[simple.v-m-earless-corner-double-arch-shortleg-tailed]
|
||||||
|
tag = "VXDX"
|
||||||
|
sampler = "m"
|
||||||
|
description = "Earless (corner top-left) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail"
|
||||||
|
variant.m = 'earlessCornerDoubleArchShortlegTailed'
|
||||||
|
variantUpright."cyrl/te" = "upright"
|
||||||
|
variantItalic."cyrl/te" = "italicNormal"
|
||||||
|
|
||||||
|
[simple.v-m-earless-rounded-double-arch]
|
||||||
|
tag = "VXDY"
|
||||||
|
sampler = "m"
|
||||||
|
description = "Earless (rounded top-left) `m` with normal middle leg touching baseline"
|
||||||
|
variant.m = 'earlessRoundedDoubleArch'
|
||||||
|
variantUpright."cyrl/te" = "upright"
|
||||||
|
variantItalic."cyrl/te" = "italicNormal"
|
||||||
|
|
||||||
|
[simple.v-m-earless-rounded-double-arch-shortleg]
|
||||||
|
tag = "VXDZ"
|
||||||
|
sampler = "m"
|
||||||
|
description = "Earless (rounded top-left) `m` with a shorter middle leg like Ubuntu Mono"
|
||||||
|
variant.m = 'earlessRoundedDoubleArchShortleg'
|
||||||
|
variantUpright."cyrl/te" = "upright"
|
||||||
|
variantItalic."cyrl/te" = "italicNormal"
|
||||||
|
|
||||||
|
[simple.v-m-earless-rounded-double-arch-tailed]
|
||||||
|
tag = "VXEA"
|
||||||
|
sampler = "m"
|
||||||
|
description = "Earless (rounded top-left) `m` with normal middle leg touching baseline, and a curly tail"
|
||||||
|
variant.m = 'earlessRoundedDoubleArchTailed'
|
||||||
|
variantUpright."cyrl/te" = "upright"
|
||||||
|
variantItalic."cyrl/te" = "italicNormal"
|
||||||
|
|
||||||
|
[simple.v-m-earless-rounded-double-arch-shortleg-tailed]
|
||||||
|
tag = "VXEB"
|
||||||
|
sampler = "m"
|
||||||
|
description = "Earless (rounded top-left) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail"
|
||||||
|
variant.m = 'earlessRoundedDoubleArchShortlegTailed'
|
||||||
|
variantUpright."cyrl/te" = "upright"
|
||||||
|
variantItalic."cyrl/te" = "italicNormal"
|
||||||
|
|
||||||
|
|
||||||
|
[simple.v-m-earless-single-arch]
|
||||||
|
tag = "VXEC"
|
||||||
|
sampler = "m"
|
||||||
|
description = "Earless (single-arch) `m` with normal middle leg touching baseline"
|
||||||
|
variant.m = 'earlessSingleArch'
|
||||||
|
variantUpright."cyrl/te" = "upright"
|
||||||
|
variantItalic."cyrl/te" = "italicNormal"
|
||||||
|
|
||||||
|
[simple.v-m-earless-single-arch-shortleg]
|
||||||
|
tag = "VXED"
|
||||||
|
sampler = "m"
|
||||||
|
description = "Earless (single-arch) `m` with a shorter middle leg like Ubuntu Mono"
|
||||||
|
variant.m = 'earlessSingleArchShortleg'
|
||||||
|
variantUpright."cyrl/te" = "upright"
|
||||||
|
variantItalic."cyrl/te" = "italicNormal"
|
||||||
|
|
||||||
|
[simple.v-m-earless-single-arch-tailed]
|
||||||
|
tag = "VXEE"
|
||||||
|
sampler = "m"
|
||||||
|
description = "Earless (single-arch) `m` with normal middle leg touching baseline, and a curly tail"
|
||||||
|
variant.m = 'earlessSingleArchTailed'
|
||||||
|
variantUpright."cyrl/te" = "upright"
|
||||||
|
variantItalic."cyrl/te" = "italicNormal"
|
||||||
|
|
||||||
|
[simple.v-m-earless-single-arch-shortleg-tailed]
|
||||||
|
tag = "VXEF"
|
||||||
|
sampler = "m"
|
||||||
|
description = "Earless (single-arch) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail"
|
||||||
|
variant.m = 'earlessSingleArchShortlegTailed'
|
||||||
|
variantUpright."cyrl/te" = "upright"
|
||||||
|
variantItalic."cyrl/te" = "italicNormal"
|
||||||
|
|
||||||
[simple.v-n-straight]
|
[simple.v-n-straight]
|
||||||
tag = 'VXCF'
|
tag = 'VXCF'
|
||||||
sampler = 'n'
|
sampler = 'n'
|
||||||
|
|
|
@ -160,7 +160,7 @@ section#matrix > div > row > span
|
||||||
font-size: 0.4em;
|
font-size: 0.4em;
|
||||||
padding: 0 0.5em;
|
padding: 0 0.5em;
|
||||||
|
|
||||||
section.opentype
|
section.char-vars, section.style-sets
|
||||||
width: 30em;
|
width: 30em;
|
||||||
padding: 1.5em 8em;
|
padding: 1.5em 8em;
|
||||||
|
|
||||||
|
@ -185,21 +185,21 @@ section.opentype
|
||||||
margin: 0 1em;
|
margin: 0 1em;
|
||||||
vertical-align: 0.3em;
|
vertical-align: 0.3em;
|
||||||
|
|
||||||
|
section.char-vars
|
||||||
> ol.narrow
|
> ol.narrow
|
||||||
font-size: 0.75em;
|
font-size: 0.75em;
|
||||||
width: 56em;
|
width: 56em;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
margin: 0 -9em;
|
margin: 0 -9em;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
display: flex;
|
columns: 2;
|
||||||
justify-content: left;
|
justify-content: left;
|
||||||
flex-wrap: wrap;
|
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
> li
|
> li
|
||||||
flex: none;
|
flex: none;
|
||||||
display: flex;
|
display: flex;
|
||||||
width: 28em;
|
width: 26em;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
> div.desc-group
|
> div.desc-group
|
||||||
|
@ -207,26 +207,45 @@ section.opentype
|
||||||
width: 5em;
|
width: 5em;
|
||||||
padding: 0 1em 0 0;
|
padding: 0 1em 0 0;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
> .triangle
|
> .triangle
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
right: -0.025em;
|
||||||
|
width: 0.5em;
|
||||||
font-feature-settings: 'NWID' on;
|
font-feature-settings: 'NWID' on;
|
||||||
display: inline-block;
|
font-weight: 200;
|
||||||
font-weight: 300;
|
|
||||||
font-size: 2em;
|
font-size: 2em;
|
||||||
margin-top: 0.5em;
|
margin-top: 0.5em;
|
||||||
width: 0.5em;
|
width: 0.5em;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
position: absolute;
|
margin-right: -0.0625em;
|
||||||
right: 0;
|
|
||||||
margin-right: -0.125em;
|
&::before, &::after
|
||||||
opacity: 0.75;
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
right: calc(0.275em - 0.5px);
|
||||||
|
width: 1px;
|
||||||
|
background: #ddd;
|
||||||
|
|
||||||
|
&::before
|
||||||
|
top: 0;
|
||||||
|
height: 0.42em;
|
||||||
|
|
||||||
|
&::after
|
||||||
|
top: 0.85em;
|
||||||
|
bottom: 0;
|
||||||
|
|
||||||
> ol.group
|
> ol.group
|
||||||
list-style: none;
|
list-style: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
flex: none;
|
flex: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
|
||||||
.desc-group
|
.desc-group
|
||||||
border: none;
|
border: none;
|
||||||
|
@ -279,6 +298,7 @@ section.opentype
|
||||||
text-align: center;
|
text-align: center;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|
||||||
|
section.style-sets
|
||||||
> ol.wide
|
> ol.wide
|
||||||
list-style: none;
|
list-style: none;
|
||||||
margin: 0 -5em;
|
margin: 0 -5em;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<section id="charvars" class="opentype char-vars">
|
<section id="charvars" class="char-vars">
|
||||||
<div class="hr">Character Variants</div>
|
<div class="hr">Character Variants</div>
|
||||||
<ol class="narrow">
|
<ol class="narrow">
|
||||||
<%_ for(const group of cvData) { _%>
|
<%_ for(const group of cvData) { _%>
|
||||||
|
@ -11,7 +11,7 @@
|
||||||
<%_ } else { _%>
|
<%_ } else { _%>
|
||||||
<div class="sample"><%= group.descSampleText[0] %></div>
|
<div class="sample"><%= group.descSampleText[0] %></div>
|
||||||
<%_ } _%>
|
<%_ } _%>
|
||||||
<div class="triangle">▶</div>
|
<div class="triangle">▹</div>
|
||||||
</div>
|
</div>
|
||||||
<ol class="group">
|
<ol class="group">
|
||||||
<%_ for(const config of group.configs) if(config.tag) { _%>
|
<%_ for(const config of group.configs) if(config.tag) { _%>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<section id="stylesets" class="opentype">
|
<section id="stylesets" class="style-sets">
|
||||||
<div class="hr">Stylistic Sets</div>
|
<div class="hr">Stylistic Sets</div>
|
||||||
<ol class="wide">
|
<ol class="wide">
|
||||||
<%_ for(const gr of ssData) { _%>
|
<%_ for(const gr of ssData) { _%>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue