Volapuk Letters, and a few other fixes (#1891)

* * CC-SA slight fix
* Added single-storey forms for iotated-a.

* Volapuk letters (#1865)
This commit is contained in:
Logo 2023-08-04 05:03:22 +08:00 committed by GitHub
parent f481c4943f
commit c603334802
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 439 additions and 179 deletions

View file

@ -290,7 +290,7 @@ glyph-block Autobuild-Transformed : begin
list 0x107A2 'oSlash'
list 0x1078E 'eRev'
list 0x10791 'ramshorn'
list 0x1078F 'closeturnepsilon'
list 0x1078F 'epsilonRevClosed'
list 0x10783 'ae'
list 0x107A3 'smcpOE'
list 0x10781 'triangleColon'

View file

@ -125,15 +125,9 @@ glyph-block Letter-Cyrillic-Iotified-A : begin
AMaskShape subDf fStraightBar CAP df.mvs
do "iotified a"
glyph-block-import Letter-Latin-Lower-A : DoubleStorey
define DoubleStoreyConfig : object
doubleStoreySerifless { DoubleStorey.Serifless }
doubleStoreySerifed { DoubleStorey.Serifed }
doubleStoreyTailed { DoubleStorey.Tailed }
doubleStoreyToothlessCorner { DoubleStorey.ToothlessCorner }
doubleStoreyToothlessRounded { DoubleStorey.ToothlessRounded }
glyph-block-import Letter-Latin-Lower-A : DoubleStorey DoubleStoreyConfig SingleStorey SingleStoreyConfig
foreach { suffix { body } } [Object.entries DoubleStoreyConfig] : do
foreach { suffix { body xTrailing } } [Object.entries DoubleStoreyConfig] : do
create-glyph "cyrl/aIotified.\(suffix)" : glyph-proc
define df : DivFrame para.diversityM 3
set-width df.width
@ -146,6 +140,17 @@ glyph-block Letter-Cyrillic-Iotified-A : begin
Iotified.full df XH [mix df.leftSB df.rightSB (3 / 4)] (XH / 2)
WithTransform [ApparentTranslate shift 0] [DoubleStorey.GetMask body df df.mvs]
foreach { suffix { body bar } } [Object.entries SingleStoreyConfig] : do
create-glyph "cyrl/aIotified.\(suffix)" : glyph-proc
define df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.e
local { subDf shift } : SubDfAndShift 1 df
include : WithTransform [ApparentTranslate shift 0] [body subDf XH bar no-shape df.mvs]
include : Iotified.full df XH (shift + subDf.leftSB + 0.5 * HVContrast * df.mvs) (XH / 2)
do "iotified e"
glyph-block-import Letter-Latin-Lower-E : SmallEShape SmallERoundedShape
@ -167,5 +172,5 @@ glyph-block Letter-Cyrillic-Iotified-A : begin
include : Iotified.full df XH df.middle (XH / 2)
select-variant 'cyrl/AIotified' 0xA656 (follow -- 'A')
select-variant 'cyrl/aIotified' 0xA657 (follow -- 'a/turnABase')
select-variant 'cyrl/aIotified' 0xA657 (follow -- 'a')
select-variant 'latn/eIotified' 0xAB61 (follow -- 'e')

View file

@ -18,7 +18,7 @@ glyph-block Letter-Cyrillic-Orthography : begin
orthographic-italic 'cyrl/tse' 0x446
orthographic-italic 'cyrl/tetse' 0x4B5
orthographic-italic 'cyrl/yat' 0x463
orthographic-italic 'cyrl/pe' 0x43f
orthographic-italic 'cyrl/pe' 0x43F
orthographic-italic 'cyrl/peMidHook' 0x4A7
orthographic-italic 'cyrl/peDescender' 0x525
orthographic-italic 'cyrl/ghe' 0x433

View file

@ -2,7 +2,7 @@ $$include '../../../meta/macros.ptl'
extern isFinite
import [mix linreg clamp fallback] from"../../../support/utils.mjs"
import [mix linreg clamp fallback SuffixCfg] from"../../../support/utils.mjs"
glyph-module
@ -14,16 +14,26 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
glyph-block-import Letter-Shared-Shapes : SerifedArcStart SerifedArcEnd SerifFrame
glyph-block-import Letter-Shared-Shapes : InwardSlabArcStart InwardSlabArcEnd
glyph-block-import Letter-Shared-Shapes : ArcStartSerif ArcEndSerif
glyph-block-import Letter-Shared-Shapes : OBarLeft OBarRight
glyph-block-import Letter-Shared-Shapes : DToothlessRise RetroflexHook CyrDescender UpwardHookShape
define SLAB-NONE 0
define SLAB-CLASSICAL 1
define SLAB-INWARD 2
define FLAT-CONNECTION 3
define OPEN-HALF 4
define OPEN-VERTICAL 5
define CLOSED-CIRCLE 6
define CLOSED-ROUND 7
define CLOSED-STEM 8
define StdBlend 0.65
define VolBlend 0.52
define [SmallEpsilon slabTop slabBot top bot blend hook] : namespace
define [SmallEpsilon] : with-params [
slabTop slabBot top bot blend hook
[ada2 SmallArchDepthA] [adb2 SmallArchDepthB]
] : namespace
export : define [Dim] : begin
local stroke : AdviceStroke2 2 3 (top - bot)
local midx : mix SB RightSB blend
@ -33,14 +43,23 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
local ada : topHeight - [mix (midyHeight + stroke / 2) (topHeight - O - stroke) (ArchDepthB / (ArchDepthA + ArchDepthB))] - TanSlope * HVContrast * stroke
local adb : [mix (stroke + O) (midyHeight - stroke / 2) (ArchDepthB / (ArchDepthA + ArchDepthB))] + TanSlope * HVContrast * stroke
local fine : stroke * CThin
return : object stroke midx midy ada adb fine
local stemFine : stroke * (ShoulderFine / Stroke)
return : object stroke midx midy ada adb fine stemFine
export : define [UpperShape] : begin
define [object stroke midx midy ada adb fine] : Dim
define [object stroke midx midy ada adb fine stemFine] : Dim
return : dispiro
match slabTop
[Just SLAB-CLASSICAL] : SerifedArcStart.RtlLhs RightSB Middle top stroke hook
[Just SLAB-INWARD] : InwardSlabArcStart.RtlLhs RightSB Middle top stroke hook
[Just OPEN-VERTICAL] : straight.down.start SB top [widths.lhs.heading stroke Downward]
([Just CLOSED-CIRCLE] || [Just CLOSED-ROUND]) : list
flat (RightSB - [if (slabTop === CLOSED-CIRCLE) OX 0]) midy [widths.lhs stroke]
curl (RightSB - [if (slabTop === CLOSED-CIRCLE) OX 0]) (top - adb2)
arcvh
g4 (Middle - CorrectionOMidX * stroke) (top - O)
archv
[Just CLOSED-STEM] : OBarRight.arcStart top SB RightSB stroke stemFine ada2 adb2 midy
__ : list [g4 (RightSB + O) (top - hook) [widths.lhs]] [hookstart (top - O)]
g4 SB [YSmoothMidL top (midy - stroke / 2)]
arcvh
@ -48,15 +67,23 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
curl midx (midy - (fine - stroke / 2)) [heading Rightward]
export : define [LowerShape] : begin
define [object stroke midx midy ada adb fine] : Dim
define [object stroke midx midy ada adb fine stemFine] : Dim
return : dispiro
flat midx (midy + (fine - stroke / 2)) [widths.heading fine 0 Leftward]
curl Middle (midy + (fine - stroke / 2)) [heading Leftward]
archv
g4 (SB + OX * 2) [YSmoothMidL (midy + stroke / 2) bot] [widths.lhs]
g4 (SB + OX * 2) [YSmoothMidL (midy + stroke / 2) bot] [widths.lhs stroke]
match slabBot
[Just SLAB-CLASSICAL] : SerifedArcEnd.LtrLhs RightSB Middle bot stroke hook
[Just SLAB-INWARD] : InwardSlabArcEnd.LtrLhs RightSB Middle bot stroke hook
[Just OPEN-VERTICAL] : straight.down.end (SB + OX * 2) bot [heading Downward]
([Just CLOSED-CIRCLE] || [Just CLOSED-ROUND]) : list
arcvh
g4 (Middle + CorrectionOMidX * stroke) (bot + O)
archv
flat (RightSB - [if (slabBot === CLOSED-CIRCLE) OX 0]) (bot + adb2)
curl (RightSB - [if (slabBot === CLOSED-CIRCLE) OX 0]) midy
[Just CLOSED-STEM] : OBarRight.arcEnd bot SB RightSB stroke stemFine ada2 adb2 midy
__ : list [hookend (bot + O)] [g4 (RightSB - O) (bot + hook)]
export : define [Shape] : union [UpperShape] [LowerShape]
@ -76,21 +103,24 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
__ : glyph-proc
glyph-block-export CyrZe
define [CyrZe slabTop slabBot top bot left right blend hook _stroke _xo _op] : namespace
local xo : fallback _xo OX
define [CyrZe] : with-params [
slabTop slabBot top bot left right blend hook _stroke
[xo OX] [op OverlayPos] [ada2 SmallArchDepthA] [adb2 SmallArchDepthB]
] : namespace
export : define [Dim] : begin
local stroke : fallback _stroke : AdviceStroke2 2 3 (top - bot)
local midx : mix right left blend
local midy : mix bot top [fallback _op OverlayPos]
local midy : mix bot top op
local topHeight : top - bot
local midyHeight : midy - bot
local adb : topHeight - [mix (midyHeight + stroke / 2) (topHeight - O - stroke) (ArchDepthA / (ArchDepthA + ArchDepthB))] + TanSlope * HVContrast * stroke
local ada : [mix (stroke + O) (midyHeight - stroke / 2) (ArchDepthA / (ArchDepthA + ArchDepthB))] - TanSlope * HVContrast * stroke
local fine : stroke * CThin
return : object stroke midx midy ada adb fine
local stemFine : stroke * (ShoulderFine / Stroke)
return : object stroke midx midy ada adb fine stemFine
define [CyrZeUpperShapeT sink] : begin
define [object stroke midx midy ada adb fine] : Dim
define [object stroke midx midy ada adb fine stemFine] : Dim
local middle : (left + right) / 2
return : sink
match slabTop
@ -98,7 +128,15 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
[Just SLAB-INWARD] : InwardSlabArcStart.LtrRhs left middle top stroke hook
[Just FLAT-CONNECTION] : list
flat (left - xo) top [widths.rhs.heading stroke Rightward]
curl (middle - CorrectionOMidX * stroke) top [heading Rightward]
curl (middle - CorrectionOMidX * stroke) top [heading Rightward]
[Just OPEN-VERTICAL] : straight.down.start right top [widths.rhs.heading stroke Downward]
([Just CLOSED-CIRCLE] || [Just CLOSED-ROUND]) : list
flat (left + [if (slabTop === CLOSED-CIRCLE) xo 0]) midy [widths.rhs stroke]
curl (left + [if (slabTop === CLOSED-CIRCLE) xo 0]) (top - ada2)
arcvh
g4 (middle - CorrectionOMidX * stroke) (top - O)
archv
[Just CLOSED-STEM] : OBarLeft.arcStart top left right stroke stemFine ada2 adb2 midy
__ : list [g4 (left - xo) (top - hook) : widths.rhs stroke] [hookstart (top - O)]
g4 right [YSmoothMidR top (midy - stroke / 2)]
arcvh
@ -106,31 +144,33 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
curl midx (midy - (fine - stroke / 2)) [heading Leftward]
define [CyrZeLowerShapeT sink] : begin
define [object stroke midx midy ada adb fine] : Dim
define [object stroke midx midy ada adb fine stemFine] : Dim
local middle : (left + right) / 2
return : sink
flat midx (midy + (fine - stroke / 2)) [widths.rhs.heading fine Rightward]
flat midx (midy + (fine - stroke / 2)) [widths.heading 0 fine Rightward]
curl middle (midy + (fine - stroke / 2)) [heading Rightward]
archv
g4 (right - xo * 2) [YSmoothMidR (midy + stroke / 2) bot] [widths.rhs stroke]
if (slabBot === OPEN-HALF)
g4.down.end (right - xo * 2) [YSmoothMidR (midy + stroke / 2) bot] [widths.rhs.heading stroke Downward]
g4 (right - xo * 2) [YSmoothMidR (midy + stroke / 2) bot] [widths.rhs stroke]
match slabBot
[Just SLAB-CLASSICAL] : SerifedArcEnd.RtlRhs left middle bot stroke hook
[Just SLAB-INWARD] : InwardSlabArcEnd.RtlRhs left middle bot stroke hook
[Just OPEN-HALF] : list
[Just OPEN-VERTICAL] : straight.down.end (right - xo * 2) bot [heading Downward]
([Just CLOSED-CIRCLE] || [Just CLOSED-ROUND]) : list
arcvh
g4 (middle + CorrectionOMidX * stroke) (bot + O)
archv
flat (left + [if (slabBot === CLOSED-CIRCLE) xo 0]) (bot + adb2)
curl (left + [if (slabBot === CLOSED-CIRCLE) xo 0]) midy
[Just CLOSED-STEM] : OBarLeft.arcEnd bot left right stroke stemFine ada2 adb2 midy
__ : list [hookend (bot + O) (sw -- stroke)] [g4 (left + xo) (bot + hook)]
export : define [UpperShape] : CyrZeUpperShapeT dispiro
export : define [LowerShape] : CyrZeLowerShapeT dispiro
define [CyrZeLowerShapeHalf] : begin
define [object stroke midx midy ada adb fine] : Dim
local middle : (left + right) / 2
return : dispiro
flat midx (midy + (fine - stroke / 2)) [widths.rhs.heading fine Rightward]
curl middle (midy + (fine - stroke / 2)) [heading Rightward]
archv
g4.down.end (right - OX * 2) [YSmoothMidR (midy + stroke / 2) bot] [widths.rhs.heading stroke Downward]
define [CyrZeLowerShapeTailed] : begin
define [object stroke midx midy ada adb fine] : Dim
local middle : (left + right) / 2
@ -155,10 +195,6 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
CyrZeUpperShapeT spiro-outline
CyrZeLowerShapeT spiro-outline
export : define [ShapeHalf] : union
CyrZeUpperShapeT dispiro
CyrZeLowerShapeHalf
export : define [KsiBaseShape] : union
CyrZeUpperShapeT dispiro
CyrZeLowerShapeTailed
@ -216,20 +252,16 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
create-glyph "cyrl/DzjeKomi.\(suffix)" : glyph-proc
include : MarkSet.capital
local ze : CyrZe slabTop slabBot CAP 0 SB RightSB StdBlend Hook
define [object stroke midy] : ze.Dim
include : ze.ShapeHalf
include : ze.AutoStartSerifL slabTop CAP 0 SB RightSB StdBlend
include : VBar.r (RightSB - OX * 2) 0 [YSmoothMidR (midy + stroke / 2) 0] stroke
local ze : CyrZe slabTop OPEN-VERTICAL CAP 0 SB RightSB StdBlend Hook
include : ze.Shape
include : ze.AutoStartSerifL
include : CyrDescender.rSideJut (RightSB - OX * 2) 0
create-glyph "cyrl/dzjeKomi.\(suffix)" : glyph-proc
include : MarkSet.e
local ze : CyrZe slabTop slabBot XH 0 SB RightSB StdBlend SHook
define [object stroke midy] : ze.Dim
include : ze.ShapeHalf
include : ze.AutoStartSerifL slabTop XH 0 SB RightSB StdBlend
include : VBar.r (RightSB - OX * 2) 0 [YSmoothMidR (midy + stroke / 2) 0] stroke
local ze : CyrZe slabTop OPEN-VERTICAL XH 0 SB RightSB StdBlend SHook
include : ze.Shape
include : ze.AutoStartSerifL
include : CyrDescender.rSideJut (RightSB - OX * 2) 0
create-glyph "cyrl/ZjeKomi.\(suffix)" : glyph-proc
@ -238,9 +270,9 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
include : df.markSet.capital
local xm : df.middle + 0.5 * df.mvs * HVContrast
local ze : CyrZe slabTop slabBot CAP 0 df.leftSB xm StdBlend Hook df.mvs
local ze : CyrZe slabTop OPEN-HALF CAP 0 df.leftSB xm StdBlend Hook df.mvs
define [object stroke midy] : ze.Dim
include : ze.ShapeHalf
include : ze.Shape
include : UpwardHookShape
left -- xm - OX * 2 - stroke * HVContrast
right -- df.rightSB
@ -259,9 +291,9 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
include : df.markSet.e
local xm : df.middle + 0.5 * df.mvs * HVContrast
local ze : CyrZe slabTop slabBot XH 0 df.leftSB xm StdBlend Hook df.mvs
local ze : CyrZe slabTop OPEN-HALF XH 0 df.leftSB xm StdBlend SHook df.mvs
define [object stroke midy] : ze.Dim
include : ze.ShapeHalf
include : ze.Shape
include : UpwardHookShape
left -- xm - OX * 2 - stroke * HVContrast
right -- df.rightSB
@ -284,6 +316,156 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
include : let [ze : CyrZe slabTop SLAB-NONE XH 0 SB RightSB StdBlend SHook]
union [ze.KsiBaseShape] [ze.AutoStartSerifL]
do "Closed Epsilon Shapes"
create-glyph 'epsilonClosed' 0x29A : glyph-proc
include : MarkSet.e
local eps : SmallEpsilon CLOSED-CIRCLE CLOSED-CIRCLE XH 0 StdBlend SHook
ada2 -- SmallArchDepthA
adb2 -- SmallArchDepthB
include : eps.Shape
create-glyph 'epsilonRevClosed' 0x25E : glyph-proc
include : MarkSet.e
local ze : CyrZe CLOSED-CIRCLE CLOSED-CIRCLE XH 0 SB RightSB StdBlend SHook
ada2 -- SmallArchDepthA
adb2 -- SmallArchDepthB
include : ze.Shape
create-glyph 'vol/Oe' 0xA79C : glyph-proc
include : MarkSet.capital
local eps : SmallEpsilon CLOSED-CIRCLE CLOSED-CIRCLE CAP 0 VolBlend Hook
ada2 -- ArchDepthA
adb2 -- ArchDepthB
include : eps.Shape
create-glyph 'vol/oe' 0xA79D : glyph-proc
include : MarkSet.e
local eps : SmallEpsilon CLOSED-CIRCLE CLOSED-CIRCLE XH 0 VolBlend SHook
ada2 -- SmallArchDepthA
adb2 -- SmallArchDepthB
include : eps.Shape
do "Volapuk AE"
glyph-block-import Letter-Latin-Lower-A : SingleStorey
define [FullBarBody df height bar hook ada2 adb2] : glyph-proc
local eps : SmallEpsilon CLOSED-STEM CLOSED-STEM height 0 VolBlend hook
ada2 -- ada2
adb2 -- adb2
define [object stroke] : eps.Dim
include : eps.Shape
include : bar df height no-shape stroke
define [EarlessCornerBody df height bar hook ada2 adb2] : glyph-proc
local eps : SmallEpsilon SLAB-INWARD CLOSED-STEM height 0 VolBlend hook
ada2 -- ada2
adb2 -- adb2
define [object stroke] : eps.Dim
include : eps.Shape
include : bar df (height - DToothlessRise) no-shape stroke
define [EarlessRoundedBody df height bar hook ada2 adb2] : glyph-proc
local eps : SmallEpsilon CLOSED-ROUND CLOSED-STEM height 0 VolBlend hook
ada2 -- ada2
adb2 -- adb2
define [object stroke] : eps.Dim
include : eps.Shape
include : bar df (height - adb2) no-shape stroke
define SingleStoreyConfig : SuffixCfg.weave
object # body
singleStorey FullBarBody
singleStoreyEarlessCorner EarlessCornerBody
singleStoreyEarlessRounded EarlessRoundedBody
object # bar
serifless SingleStorey.SeriflessBar
serifed SingleStorey.SerifedBar
tailed SingleStorey.TailedBar
foreach { suffix { body bar } } [Object.entries SingleStoreyConfig] : do
create-glyph "vol/Ae.\(suffix)" : glyph-proc
include : MarkSet.capital
include : body [DivFrame 1] CAP bar Hook ArchDepthA ArchDepthB
create-glyph "vol/ae.\(suffix)" : glyph-proc
include : MarkSet.e
include : body [DivFrame 1] XH bar SHook SmallArchDepthA SmallArchDepthB
do "Volapuk UE"
glyph-block-import Letter-Latin-U : USerifs
glyph-block-import Letter-Shared-Shapes : RightwardTailedBar
define [UToothed df height slab hook ada2 adb2] : glyph-proc
set-base-anchor 'trailing' df.rightSB 0
local eps : SmallEpsilon OPEN-VERTICAL CLOSED-STEM height 0 VolBlend hook
ada2 -- ada2
adb2 -- adb2
define [object stroke] : eps.Dim
include : eps.Shape
include : VBar.r df.rightSB 0 height stroke
include : slab df height
define [UTailed df height slab hook ada2 adb2] : glyph-proc
set-base-anchor 'trailing' (df.rightSB + SideJut) 0
local eps : SmallEpsilon OPEN-VERTICAL CLOSED-STEM height 0 VolBlend hook
ada2 -- ada2
adb2 -- adb2
define [object stroke] : eps.Dim
include : eps.Shape
include : RightwardTailedBar df.rightSB 0 height stroke
include : slab df height
define [UToothlessRounded df height slab hook ada2 adb2] : glyph-proc
local eps : SmallEpsilon OPEN-VERTICAL CLOSED-ROUND height 0 VolBlend hook
ada2 -- ada2
adb2 -- adb2
define [object stroke] : eps.Dim
include : eps.Shape
include : VBar.r df.rightSB ada2 height stroke
include : slab df height
define [UToothlessCorner df height slab hook ada2 adb2] : glyph-proc
local eps : SmallEpsilon OPEN-VERTICAL SLAB-INWARD height 0 VolBlend hook
ada2 -- ada2
adb2 -- adb2
define [object stroke] : eps.Dim
include : eps.Shape
include : VBar.r df.rightSB DToothlessRise height stroke
include : slab df height stroke
define SmallUConfig : SuffixCfg.weave
object # body
toothed UToothed
tailed UTailed
toothlessCorner UToothlessCorner
toothlessRounded UToothlessRounded
function [body] : object # serifs
serifless no-shape
bottomRightSerifed USerifs.BottomRight
motionSerifed : match body
[Just 'toothed'] USerifs.MotionToothed
__ USerifs.MotionToothless
serifed : match body
[Just 'toothed'] USerifs.Toothed
[Just 'tailed'] USerifs.Tailed
__ USerifs.SmallToothless
foreach { suffix { Base Slabs } } [Object.entries SmallUConfig] : do
create-glyph "vol/Ue.\(suffix)" : glyph-proc
local df : DivFrame 1
include : MarkSet.capital
include : Base df CAP Slabs Hook ArchDepthA ArchDepthB
create-glyph "vol/ue.\(suffix)" : glyph-proc
local df : DivFrame 1
include : MarkSet.e
include : Base df XH Slabs SHook SmallArchDepthA SmallArchDepthB
select-variant 'vol/Ae' 0xA79A (follow -- 'a/single')
select-variant 'vol/ae' 0xA79B (follow -- 'a/single')
select-variant 'vol/Ue' 0xA79E (follow -- 'u')
select-variant 'vol/ue' 0xA79F (follow -- 'u')
alias 'grek/epsilon' 0x3B5 'latn/epsilon.serifless'
select-variant 'latn/Epsilon' 0x190
select-variant 'latn/epsilon' 0x25B

View file

@ -21,7 +21,7 @@ glyph-block Letter-Latin-C : begin
define SLAB-NONE 0
define SLAB-CLASSICAL 1
define SLAB-INWARD 2
define SLAB-FLAT 3
define FLAT-CONNECTION 3
glyph-block-export CShapeT
define [CShapeT sink offset df st sb top bot ada adb hook sw origBar] : sink
@ -32,7 +32,7 @@ glyph-block Letter-Latin-C : begin
g4 (df.rightSB - offset) (top - DToothlessRise)
g4 (df.middle - CorrectionOMidX * sw) (top - O - offset)
archv
[Just SLAB-FLAT] : list
[Just FLAT-CONNECTION] : list
flat (df.rightSB - offset) (top - offset)
curl (df.middle - CorrectionOMidX * sw) (top - offset)
archv
@ -61,7 +61,7 @@ glyph-block Letter-Latin-C : begin
g4 (df.leftSB + offset) (top - DToothlessRise)
g4 (df.middle - CorrectionOMidX * sw) (top - O - offset)
archv
[Just SLAB-FLAT] : list
[Just FLAT-CONNECTION] : list
flat (df.leftSB + offset) (top - offset)
curl (df.middle - CorrectionOMidX * sw) (top - offset)
archv

View file

@ -14,7 +14,7 @@ glyph-block Letter-Latin-Lower-A : begin
glyph-block-import Letter-Shared-Shapes : RightwardTailedBar InvRightwardTailedBar
glyph-block-import Letter-Shared-Shapes : DToothlessRise DMBlend RetroflexHook
glyph-block-export DoubleStorey
glyph-block-export DoubleStorey DoubleStoreyConfig
define DoubleStorey : namespace
define [ADoubleStoreyStroke df] : AdviceStroke2 2 3 XH df.div
define [ADoubleStoreySmoothA df] : begin
@ -132,52 +132,82 @@ glyph-block Letter-Latin-Lower-A : begin
Rect XH 0 (RightSB - BBD) Width
include : HBar.b (RightSB - BBD) RightSB 0 BBS
glyph-block-export SingleStorey SingleStoreyConfig
define SingleStorey : namespace
export : define [FullBarBody height bar mask] : glyph-proc
include : OBarRight.shape (top -- height)
include : bar height mask
export : define [EarlessCornerBody height bar mask] : glyph-proc
include : OBarLeft.toothless (rise -- DToothlessRise) (mBlend -- DMBlend)
include : FlipAround Middle (XH / 2)
include : bar (height - DToothlessRise) mask
export : define [EarlessRoundedBody height bar mask] : glyph-proc
include : OBarLeft.rounded (yTerminal -- (XH - SmallArchDepthA))
include : FlipAround Middle (XH / 2)
include : bar (height - SmallArchDepthB) mask
export : define [FullBarBody df height bar mask _sw] : glyph-proc
local sw : fallback _sw df.mvs
include : OBarRight.shape
top -- height
left -- df.leftSB
right -- df.rightSB
sw -- sw
fine -- sw * (ShoulderFine / Stroke)
ada -- [df.archDepthA SmallArchDepth sw]
adb -- [df.archDepthB SmallArchDepth sw]
include : bar df height mask sw
export : define [EarlessCornerBody df height bar mask _sw] : glyph-proc
local sw : fallback _sw df.mvs
include : OBarLeft.toothless
top -- height
left -- df.leftSB
right -- df.rightSB
sw -- sw
fine -- sw * (ShoulderFine / Stroke)
ada -- [df.archDepthA SmallArchDepth sw]
adb -- [df.archDepthB SmallArchDepth sw]
rise -- DToothlessRise
mBlend -- DMBlend
include : FlipAround df.middle (height / 2)
include : bar df (height - DToothlessRise) mask sw
export : define [EarlessRoundedBody df height bar mask _sw] : glyph-proc
local sw : fallback _sw df.mvs
local ada : df.archDepthA SmallArchDepth sw
local adb : df.archDepthB SmallArchDepth sw
include : OBarLeft.rounded
top -- height
left -- df.leftSB
right -- df.rightSB
sw -- sw
fine -- sw * (ShoulderFine / Stroke)
ada -- ada
adb -- adb
yTerminal -- (height - ada)
include : FlipAround df.middle (height / 2)
include : bar df (height - adb) mask sw
export : define [SeriflessBar height mask] : glyph-proc
set-base-anchor 'trailing' RightSB 0
export : define [SeriflessBar df height mask sw] : glyph-proc
set-base-anchor 'trailing' df.rightSB 0
include : difference
VBar.r RightSB 0 height
mask height
export : define [SerifedBar height mask] : glyph-proc
include : SeriflessBar height mask
include [SerifFrame.fromDf [DivFrame 1] XH 0].rb.outer
export : define [TailedBar height mask] : glyph-proc
set-base-anchor 'trailing' (RightSB + SideJut) 0
VBar.r df.rightSB 0 height sw
mask df height sw
export : define [SerifedBar df height mask sw] : glyph-proc
include : SeriflessBar df height mask sw
include [SerifFrame.fromDf df height 0 (swSerif -- sw)].rb.outer
export : define [TailedBar df height mask sw] : glyph-proc
set-base-anchor 'trailing' (df.rightSB + SideJut) 0
include : difference
RightwardTailedBar RightSB 0 height
mask height
RightwardTailedBar df.rightSB 0 height sw
mask df height sw
set SeriflessBar.inv SeriflessBar
set SerifedBar.inv : function [height mask] : glyph-proc
include : SeriflessBar height mask
include [SerifFrame.fromDf [DivFrame 1] height 0].rt.outer
set TailedBar.inv : function [height mask] : glyph-proc
set-base-anchor 'trailing' (RightSB + SideJut) 0
set SerifedBar.inv : function [df height mask sw] : glyph-proc
include : SeriflessBar df height mask sw
include [SerifFrame.fromDf df height 0 (swSerif -- sw)].rt.outer
set TailedBar.inv : function [df height mask sw] : glyph-proc
set-base-anchor 'trailing' (df.rightSB + SideJut) 0
include : difference
InvRightwardTailedBar RightSB 0 height
mask height
InvRightwardTailedBar df.rightSB 0 height sw
mask df height sw
export : define [ScriptCut y] : spiro-outline
corner RightSB y
corner (RightSB - Stroke * HVContrast) y
corner (RightSB - Stroke * HVContrast) (y - Stroke / 2)
export : define [InvScriptCut y] : spiro-outline
corner RightSB 0
corner (RightSB - Stroke * HVContrast) 0
corner (RightSB - Stroke * HVContrast) (0 + Stroke / 2)
export : define [ScriptCut df y sw] : spiro-outline
corner df.rightSB y
corner (df.rightSB - sw * HVContrast) y
corner (df.rightSB - sw * HVContrast) (y - sw / 2)
export : define [InvScriptCut df y sw] : spiro-outline
corner df.rightSB 0
corner (df.rightSB - sw * HVContrast) 0
corner (df.rightSB - sw * HVContrast) (0 + sw / 2)
define SingleStoreyConfig : SuffixCfg.weave
object # body
@ -193,16 +223,16 @@ glyph-block Letter-Latin-Lower-A : begin
foreach { suffix { body bar } } [Object.entries SingleStoreyConfig] : do
create-glyph "a.\(suffix)" : glyph-proc
include : MarkSet.e
include : body XH bar no-shape
include : body [DivFrame 1] XH bar no-shape
create-glyph "largescripta.\(suffix)" : glyph-proc
include : MarkSet.capital
include : body CAP bar SingleStorey.ScriptCut
include : body [DivFrame 1] CAP bar SingleStorey.ScriptCut
create-glyph "scripta.\(suffix)" : glyph-proc
include : MarkSet.e
include : body XH bar SingleStorey.ScriptCut
include : body [DivFrame 1] XH bar SingleStorey.ScriptCut
create-glyph "invscripta.\(suffix)" : glyph-proc
include : MarkSet.e
include : body XH bar.inv SingleStorey.InvScriptCut
include : body [DivFrame 1] XH bar.inv SingleStorey.InvScriptCut
select-variant 'a' 'a'
link-reduced-variant 'a/sansSerif' 'a' MathSansSerif

View file

@ -14,7 +14,7 @@ glyph-block Letter-Latin-U : begin
glyph-block-import Letter-Shared-Shapes : nShoulder RightwardTailedBar DToothlessRise SerifFrame
glyph-block-import Letter-Shared-Shapes : CyrTailDescender RetroflexHook VerticalHook
glyph-block-export UShape
glyph-block-export UShape USerifs
define [UArcT] : with-params [sink df top bottom [stroke Stroke] [ada ArchDepthA] [adb ArchDepthB] [offset 0]] : sink
widths.lhs stroke
@ -84,52 +84,53 @@ glyph-block Letter-Latin-U : begin
curl df.rightSB 0 [heading Downward]
include : FlipAround df.middle (top / 2)
define [UTopLeftSerif df yTop] : tagged 'serifLT'
HSerif.lt df.leftSB yTop SideJut
define [UTopLeftSerif df yTop _sw] : tagged 'serifLT'
HSerif.lt df.leftSB yTop SideJut _sw
define [UTopRightSerif df yTop] : tagged 'serifRT'
HSerif.lt (df.rightSB - Stroke * HVContrast) yTop SideJut
define [UTopRightSerif df yTop _sw] : tagged 'serifRT'
HSerif.lt (df.rightSB - Stroke * HVContrast) yTop SideJut _sw
define [UBottomRightSerif df yTop] : glyph-proc
include : tagged 'serifRB' : HSerif.rb df.rightSB 0 SideJut
define [UBottomRightSerif df yTop _sw] : glyph-proc
include : tagged 'serifRB' : HSerif.rb df.rightSB 0 SideJut _sw
define trAnchor currentGlyph.baseAnchors.trailing
if trAnchor : begin
set-base-anchor 'trailing' (trAnchor.x + SideJut) trAnchor.y
define [SmallUSlabs df top] : glyph-proc
include : UTopLeftSerif df top
if [not para.isItalic] : include : UTopRightSerif df top
include : UBottomRightSerif df top
define USerifs : namespace
export : define [Toothed df top _sw] : glyph-proc
include : UTopLeftSerif df top _sw
if [not para.isItalic] : include : UTopRightSerif df top _sw
include : UBottomRightSerif df top _sw
define [UrtBaseSlabs df top] : glyph-proc
include : UTopLeftSerif df top
if [not para.isItalic] : include : UTopRightSerif df top
export : define [RTBase df top _sw] : glyph-proc
include : UTopLeftSerif df top _sw
if [not para.isItalic] : include : UTopRightSerif df top _sw
define [SmallUTailedSlabs df top] : glyph-proc
include : UTopLeftSerif df top
if [not para.isItalic] : include : UTopRightSerif df top
export : define [Tailed df top _sw] : glyph-proc
include : UTopLeftSerif df top _sw
if [not para.isItalic] : include : UTopRightSerif df top _sw
define [CapitalUMotionToothlessSlabs df top] : glyph-proc
include : HSerif.lt df.leftSB top SideJut
include : HSerif.rt df.rightSB top SideJut
export : define [BilateralMotion df top _sw] : glyph-proc
include : HSerif.lt df.leftSB top SideJut _sw
include : HSerif.rt df.rightSB top SideJut _sw
define [SmallUToothlessSlabs df top] : glyph-proc
include : UTopLeftSerif df top
include : UTopRightSerif df top
export : define [SmallToothless df top _sw] : glyph-proc
include : UTopLeftSerif df top _sw
include : UTopRightSerif df top _sw
define [SmallUMotionSlabs df top] : glyph-proc
include : UTopLeftSerif df top
include : UBottomRightSerif df top
export : define [MotionToothed df top _sw] : glyph-proc
include : UTopLeftSerif df top _sw
include : UBottomRightSerif df top _sw
define [SmallUBottomRightSlabs df top] : glyph-proc
include : UBottomRightSerif df top
export : define [BottomRight df top _sw] : glyph-proc
include : UBottomRightSerif df top _sw
define [SmallUMotionTailedSlabs df top] : glyph-proc
include : UTopLeftSerif df top
export : define [MotionToothless df top _sw] : glyph-proc
include : UTopLeftSerif df top _sw
define [ToothlessSlabs df top] : begin
local sf : SerifFrame.fromDf df top 0
return : composite-proc sf.lt.full sf.rt.full
export : define [Toothless df top _sw] : begin
local sf : SerifFrame.fromDf df top 0 (swSerif -- _sw)
return : composite-proc sf.lt.full sf.rt.full
define CapitalUConfig : SuffixCfg.weave
object # body
@ -138,15 +139,15 @@ glyph-block Letter-Latin-U : begin
toothlessCorner UToothlessCorner
toothlessRounded UToothlessRounded
function [body] : object # serifs
serifless { no-shape false }
bilateralMotionSerifed { CapitalUMotionToothlessSlabs true }
serifless { no-shape false }
bilateralMotionSerifed { USerifs.BilateralMotion true }
unilateralMotionSerifed : match body
[Just 'toothed'] { SmallUMotionSlabs true }
__ { SmallUMotionTailedSlabs true }
[Just 'toothed'] { USerifs.MotionToothed true }
__ { USerifs.MotionToothless true }
serifed : match body
[Just 'toothed'] { SmallUSlabs true }
[Just 'tailed'] { SmallUTailedSlabs true }
__ { ToothlessSlabs true }
[Just 'toothed'] { USerifs.Toothed true }
[Just 'tailed'] { USerifs.Tailed true }
__ { USerifs.Toothless true }
foreach { suffix { Base {Slabs fLTSlab} } } [Object.entries CapitalUConfig] : do
create-glyph "U.\(suffix)" : glyph-proc
@ -174,15 +175,15 @@ glyph-block Letter-Latin-U : begin
urtBase UToothed
function [body] : object # serifs
serifless no-shape
bottomRightSerifed SmallUBottomRightSlabs
bottomRightSerifed USerifs.BottomRight
motionSerifed : match body
[Just 'toothed'] SmallUMotionSlabs
__ SmallUMotionTailedSlabs
[Just 'toothed'] USerifs.MotionToothed
__ USerifs.MotionToothless
serifed : match body
[Just 'toothed'] SmallUSlabs
[Just 'tailed'] SmallUTailedSlabs
[Just 'urtBase'] UrtBaseSlabs
__ SmallUToothlessSlabs
[Just 'toothed'] USerifs.Toothed
[Just 'tailed'] USerifs.Tailed
[Just 'urtBase'] USerifs.RTBase
__ USerifs.SmallToothless
foreach { suffix { Base Slabs } } [Object.entries SmallUConfig] : do
create-glyph "u.\(suffix)" : glyph-proc

View file

@ -212,33 +212,7 @@ glyph-block Letter-Latin-Upper-B : begin
flat Middle (midy + (fine - stroke / 2)) [widths.heading fine 0 Leftward]
curl mid (midy + (fine - stroke / 2)) [widths.heading fine 0 Leftward]
define [ClosedEpsilonShape top] : glyph-proc
local stroke : AdviceStroke2 2 3 top
local mid : mix SB RightSB 0.65
local midy : top * HBarPos
local ada : top - [mix (midy + stroke / 2) (top - O - stroke) (ArchDepthB / (ArchDepthA + ArchDepthB))] - TanSlope * HVContrast * stroke
local adb : [mix (stroke + O) (midy - stroke / 2) (ArchDepthB / (ArchDepthA + ArchDepthB))] + TanSlope * HVContrast * stroke
local fine : stroke * CThin
include : dispiro
widths.rhs fine
flat mid (midy - (fine - stroke / 2)) [heading Leftward]
curl Middle (midy - (fine - stroke / 2)) [heading Leftward]
archv
g4 (SB + (OX - O)) (top - ada) [widths.rhs stroke]
arcvh
g4 (Middle - stroke * 0.06 - CorrectionOMidS) (top - O)
archv
flat (RightSB - O) (top - SmallArchDepthB)
curl (RightSB - O) SmallArchDepthA
arcvh
g4 (Middle - stroke * 0.06 + CorrectionOMidS) O
archv
g4 (SB + (OX - O) + O * 2) (adb)
arcvh
flat Middle (midy + (fine - stroke / 2)) [widths.heading 0 fine Rightward]
curl mid (midy + (fine - stroke / 2)) [widths.heading 0 fine Rightward]
create-glyph 'closeturnepsilon' 0x25E : glyph-proc
create-glyph 'cyrl/ve.italic' : glyph-proc
include : MarkSet.e
include : ItalicCyrveShape XH
@ -247,11 +221,6 @@ glyph-block Letter-Latin-Upper-B : begin
include : ItalicCyrveShape Ascender
alias 'cyrl/ve.BGR' null 'grek/betaSymbol'
alias 'cyrl/ve.italic' null 'closeturnepsilon'
create-glyph 'closeepsilon' 0x29A : glyph-proc
include : MarkSet.e
include : ClosedEpsilonShape XH
create-glyph 'grek/beta' 0x3B2 : glyph-proc
include : MarkSet.bp

View file

@ -226,6 +226,36 @@ glyph-block Letter-Shared-Shapes : begin
glyph-block-export : OBarLeft
define OBarLeft : namespace
define kSkewShift 0.5
export : define [arcStart] : with-params [
[top XH] [left SB] [right RightSB] [sw Stroke] [fine ShoulderFine]
[ada SmallArchDepthA] [adb SmallArchDepthB]
[ystart (top - ada - 0.01)]
] : begin
local skew : shoulderMidSkew fine sw
local mt : [mix left right 0.5] + (skew + kSkewShift * TanSlope) * sw
local xstart : left + (sw - fine) * HVContrast
return : list
flat xstart ystart [widths.rhs fine]
curl xstart (top - ada)
arcvh
g4 mt (top - O) [widths.rhs.heading sw {.y (-1) .x (-skew)}]
archv
export : define [arcEnd] : with-params [
[bot 0] [left SB] [right RightSB] [sw Stroke] [fine ShoulderFine]
[ada SmallArchDepthA] [adb SmallArchDepthB]
[yend (bot + ada + 0.01)]
] : begin
local skew : shoulderMidSkew fine sw
local mb : [mix left right 0.5] + (skew + kSkewShift * TanSlope) * sw
local xend : left + (sw - fine) * HVContrast
return : list
arcvh
g4 mb (bot + O) [widths.rhs.heading sw {.y (1) .x (-skew)}]
archv
flat xend (bot + adb) [widths.rhs fine]
curl xend yend
export : define [shape] : with-params [
[top XH] [left SB] [right RightSB] [sw Stroke] [fine ShoulderFine]
[ada SmallArchDepthA] [adb SmallArchDepthB]
@ -334,6 +364,37 @@ glyph-block Letter-Shared-Shapes : begin
glyph-block-export : OBarRight
define OBarRight : namespace
define kSkewShift 0.5
export : define [arcStart] : with-params [
[top XH] [left SB] [right RightSB] [sw Stroke] [fine ShoulderFine]
[ada SmallArchDepthA] [adb SmallArchDepthB]
[ystart (top - ada - 0.01)]
] : begin
local skew : shoulderMidSkew fine sw
local mt : [mix left right 0.5] - (skew + kSkewShift * TanSlope) * sw
local xstart : right - (sw - fine) * HVContrast
return : list
flat xstart ystart [widths.lhs fine]
curl xstart (top - adb)
arcvh
g4 mt (top - O) [widths.lhs.heading sw {.y (-1) .x (skew)}]
archv
export : define [arcEnd] : with-params [
[bot 0] [left SB] [right RightSB] [sw Stroke] [fine ShoulderFine]
[ada SmallArchDepthA] [adb SmallArchDepthB]
[yend (bot + ada + 0.01)]
] : begin
local skew : shoulderMidSkew fine sw
local mb : [mix left right 0.5] - (skew + kSkewShift * TanSlope) * sw
local xend : right - (sw - fine) * HVContrast
return : list
arcvh
g4 mb (bot + O) [widths.lhs.heading sw {.y (1) .x (skew)}]
archv
flat xend (bot + ada) [widths.lhs fine]
curl xend yend
export : define [shape] : with-params [
[top XH] [left SB] [right RightSB] [sw Stroke] [fine ShoulderFine]
[ada SmallArchDepthA] [adb SmallArchDepthB]

View file

@ -479,8 +479,8 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1
local arrowX : l + 0.5 * HVContrast * Stroke
local headLength : headSize * [Math.sqrt 0.5]
local gapSize : Math.max (2 * headLength) (CAP - 0 - ada - adb)
local gapTop : SymbolMid + 0.5 * gapSize
local gapBot : SymbolMid - 0.5 * gapSize
local gapTop : CAP / 2 + 0.5 * gapSize
local gapBot : CAP / 2 - 0.5 * gapSize
set-width MosaicWidth
include : union
difference