Add variants for Ampersand (#211).

This commit is contained in:
Belleve Invis 2020-05-30 22:53:49 -07:00
parent a835d0a3c6
commit b830f345ba
5 changed files with 1444 additions and 1351 deletions

View file

@ -1,2 +1,3 @@
* Add variants for six (`6`) : `v-six-closed-contour` (`VXAE`) and `v-six-open-contour` (`VXAF`). `v-nine-turned-six` is renamed to `v-nine-open-contour` (#562).
* Make variant selectors able to influence `l-dot` (U+0140, #566).
* Add variants for Ampersand (#211).

View file

@ -838,4 +838,8 @@ glyph-block CommonShapes : begin
define tension : tensionCoeff * (0.5 - 0.4 * dist - 0.005 * strokeCoeff + slantCoeff * TanSlope)
return : alsoThruThem {{(0.5 - dist) tension} {(0.5 + dist) (1 - tension)}} [widths.center stroke]
glyph-block-export select-variant italic-variant alias composite refer-glyph query-glyph into-unicode turned HDual hcombine VDual vcombine Rect Ring RingAt DotAt RingStroke RingStrokeAt DotStrokeAt CircleRing CircleRingAt CircleDotAt OShape OShapeOutline OBarLeftShape OBarRightShape LeftwardTopSerif LeftwardBottomSerif RightwardTopSerif RightwardBottomSerif CenterTopSerif CenterBottomSerif DownwardRightSerif UpwardRightSerif DownwardLeftSerif UpwardLeftSerif AIVSerifs AIHSerifs AINSerifs AICyrISerifs AIMSerifs halfXStrand xStrand nShoulderKnots nShoulder mShoulderSpiro HBar HBarTop HBarBottom HOverlayBar VBar VBarLeft VBarRight VerticalHook LegShape LeftHook HooktopLeftBar CurlyTail HCurlyTail FlatSlashShape determineMixR hookstart hookend CyrDescender Fork Miniature Thinner Widen FlipAround ScaleAround Realign ForceUpright Overlay diagCor CreateWaveShape NameUni PointingTo WithDerivatives WithAIHSerifsMask SNeck
define [WithTransform tfm gr] : create-glyph : glyph-construction
include gr
apply-transform tfm
glyph-block-export select-variant italic-variant alias composite refer-glyph query-glyph into-unicode turned HDual hcombine VDual vcombine Rect Ring RingAt DotAt RingStroke RingStrokeAt DotStrokeAt CircleRing CircleRingAt CircleDotAt OShape OShapeOutline OBarLeftShape OBarRightShape LeftwardTopSerif LeftwardBottomSerif RightwardTopSerif RightwardBottomSerif CenterTopSerif CenterBottomSerif DownwardRightSerif UpwardRightSerif DownwardLeftSerif UpwardLeftSerif AIVSerifs AIHSerifs AINSerifs AICyrISerifs AIMSerifs halfXStrand xStrand nShoulderKnots nShoulder mShoulderSpiro HBar HBarTop HBarBottom HOverlayBar VBar VBarLeft VBarRight VerticalHook LegShape LeftHook HooktopLeftBar CurlyTail HCurlyTail FlatSlashShape determineMixR hookstart hookend CyrDescender Fork Miniature Thinner Widen FlipAround ScaleAround Realign ForceUpright Overlay diagCor CreateWaveShape NameUni PointingTo WithDerivatives WithAIHSerifsMask SNeck WithTransform

View file

@ -6,7 +6,7 @@ import [designParameters] from '../meta/aesthetics'
glyph-module
glyph-block Symbol-Punctuation : begin
glyph-block Symbol-Punctuation-Brackets : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
@ -15,7 +15,6 @@ glyph-block Symbol-Punctuation : begin
define MosaicBottom fontMetrics.OS_2.sTypoDescender
define MosaicHeight : MosaicTop - MosaicBottom
do 'Brackets'
define [ParenDim delta] : object
outside : [mix SB RightSB designParameters.parenOutside] - delta
inside : mix SB RightSB designParameters.parenInside
@ -350,7 +349,10 @@ glyph-block Symbol-Punctuation : begin
turned 'floorRight' 0x230B 'ceilingLeft' Middle symbolMid
turned 'ceilingRight' 0x2309 'floorLeft' Middle symbolMid
do 'Small Punctuations'
glyph-block Symbol-Punctuation-Small : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
sketch # period
set-width Width
include : DotAt Middle PeriodRadius (PeriodRadius - O)
@ -425,7 +427,10 @@ glyph-block Symbol-Punctuation : begin
save 'semicolon' ';'
save 'greekquestion' 0x37E
do 'Emotion Punctuations'
glyph-block Symbol-Punctuation-Emotion : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
local questionBottom : Math.max (CAP * 0.3) (DotSize * 1.5)
define [QuestionShape top questionBottom left right] : glyph-construction
@ -515,9 +520,9 @@ glyph-block Symbol-Punctuation : begin
include : HBarTop SB RightSB (symbolMid - XH * 0.1) OperatorStroke
save 'palatoalveolarclick' 0x1C2
do 'Typographic Symbols'
sketch # ampersand
set-width Width
glyph-block Symbol-Punctuation-Ampersand : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
local sw : adviceBlackness2 3 3 CAP
local fine : adviceBlackness 3.5
@ -527,10 +532,9 @@ glyph-block Symbol-Punctuation : begin
local rr 0.95
local q 0.45
local r 1.1
local endX : [mix SB RightSB r] - sw * HVContrast
include : difference
create-glyph 'ampersand.closed' : difference
dispiro
widths.rhs fine
flat (RightSB - O) CapMiddle [heading Downward]
@ -548,7 +552,44 @@ glyph-block Symbol-Punctuation : begin
flat [mix SB endX 0.5] [mix 0 (CAP - SmoothA * pr) 0.5]
curl [mix SB endX 2] (- CAP + SmoothA * pr)
Rect 0 (-CAP * 2) endX (Width * 2)
save 'ampersand' '&'
create-glyph 'ampersand.open' : union
difference
dispiro
widths.rhs fine
flat (RightSB - O) CapMiddle [heading Downward]
curl (RightSB - O) SmoothA
arcvh
g4 (Middle + CorrectionOMidX * sw) O [widths.rhs sw]
archv
g4 (SB + O) SmoothB
alsoThru 0.5 0.5 [widths.center sw]
g4 [mix SB RightSB p] (CAP - SmoothB * pr) [widths.lhs sw]
Rect (CAP * 2) CapMiddle Middle Width
intersection
Rect (CAP * 2) SmoothA 0 (RightSB - fine * HVContrast)
WithTransform [Translate (-O) 0] : spiro-outline
g4 ([mix SB RightSB [mix p l 0.5]] - CorrectionOMidX * sw) (CAP - O)
archv
g4 [mix SB RightSB l] (CAP - SmoothA * pr)
flat [mix SB endX 0.5] [mix 0 (CAP - SmoothA * pr) 0.5]
corner [mix SB endX 2] (- CAP + SmoothA * pr)
corner ([mix SB endX 2] + Width * 2) (- CAP + SmoothA * pr)
corner ([mix SB endX 2] + Width * 2) (CAP - O)
difference
dispiro
g4 [mix SB RightSB p] (CAP - SmoothB * pr) [widths.lhs sw]
hookstart CAP
g4 [mix SB RightSB l] (CAP - SmoothA * pr)
flat [mix SB endX 0.5] [mix 0 (CAP - SmoothA * pr) 0.5]
curl [mix SB endX 2] (- CAP + SmoothA * pr)
Rect 0 (-CAP * 2) endX (Width * 2)
select-variant 'ampersand' '&'
glyph-block Symbol-Punctuation-At : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
sketch # at.threefold
set-width Width
@ -683,6 +724,10 @@ glyph-block Symbol-Punctuation : begin
select-variant 'at' '@'
glyph-block Symbol-Punctuation-ParagraphAndSection : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
sketch # paragraph
set-width Width
local sw : adviceBlackness 3.6
@ -735,7 +780,10 @@ glyph-block Symbol-Punctuation : begin
include s
save 'section' 0xA7
do "Asterisk"
glyph-block Symbol-Punctuation-Asterisk : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
local asteriskCenterY : parenTop - LongJut * 1.5
local asteriskKinds : list
list 5 1.2 Stroke 'asterisk' 'high' 'low'
@ -767,7 +815,10 @@ glyph-block Symbol-Punctuation : begin
to-name -- 'asterisk.dfltlow'
transform -- {.high 'low' .hexhigh 'hexlow'}
do "Slashes and numbersign"
glyph-block Symbol-Punctuation-Slashes-And-Number-Sign : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
define slashDefautLeft : SB + HalfStroke
define slashDefaultRight : RightSB - HalfStroke
define [SlashShape l r _t _b _w] : glyph-construction
@ -781,33 +832,6 @@ glyph-block Symbol-Punctuation : begin
line-to (r - w * cor) t
reverse-last
do "numbersign"
local nsTop : mix symbolMid parenTop 0.85
local nsBot : mix symbolMid parenBot 0.85
local fine : adviceBlackness 3.5
local l : SB - fine / 2
local r : RightSB + fine / 2
local hsp : ((r - l) - (fine * 2 * HVContrast)) * 0.3
sketch # numbersign.upright
include : HBar l r [mix nsTop nsBot 0.3]
include : HBar l r [mix nsTop nsBot 0.7]
include : VBarLeft (l + hsp) nsBot nsTop fine
include : VBarRight (r - hsp) nsBot nsTop fine
save 'numbersign.upright'
sketch # numbersign.slanted
local x : hsp + fine / 2 * HVContrast
local w : (r - l) * 0.15
local shift : w / 3
include : HBar (l + shift) (r + shift) [mix nsTop nsBot 0.3]
include : HBar (l - shift) (r - shift) [mix nsTop nsBot 0.7]
include : SlashShape (l + x - w) (l + x + w) nsTop nsBot fine
include : SlashShape (r - x - w) (r - x + w) nsTop nsBot fine
save 'numbersign.slanted'
select-variant 'numbersign' '#'
sketch # slash
include : SlashShape slashDefautLeft slashDefaultRight
save 'slash' '/'
@ -845,8 +869,37 @@ glyph-block Symbol-Punctuation : begin
include : BackslashShape 0 (Middle + backslashWidth / 2)
save 'backslash.right'
do "numbersign"
local nsTop : mix symbolMid parenTop 0.85
local nsBot : mix symbolMid parenBot 0.85
local fine : adviceBlackness 3.5
local l : SB - fine / 2
local r : RightSB + fine / 2
local hsp : ((r - l) - (fine * 2 * HVContrast)) * 0.3
sketch # numbersign.upright
include : HBar l r [mix nsTop nsBot 0.3]
include : HBar l r [mix nsTop nsBot 0.7]
include : VBarLeft (l + hsp) nsBot nsTop fine
include : VBarRight (r - hsp) nsBot nsTop fine
save 'numbersign.upright'
sketch # numbersign.slanted
local x : hsp + fine / 2 * HVContrast
local w : (r - l) * 0.15
local shift : w / 3
include : HBar (l + shift) (r + shift) [mix nsTop nsBot 0.3]
include : HBar (l - shift) (r - shift) [mix nsTop nsBot 0.7]
include : SlashShape (l + x - w) (l + x + w) nsTop nsBot fine
include : SlashShape (r - x - w) (r - x + w) nsTop nsBot fine
save 'numbersign.slanted'
select-variant 'numbersign' '#'
glyph-block Symbol-Punctuation-Dashes : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
do 'Dashes'
do 'underscore'
define openBoxGap : Math.max (Stroke * 1.25) (XH / 4)
define [OpenBoxSide y] : begin
@ -924,8 +977,10 @@ glyph-block Symbol-Punctuation : begin
include : HBar 0 (MosaicWidth * 2) symbolMid
save [MangleName 'doubleEmDash']
glyph-block Symbol-Punctuation-Interpuncts : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
do 'Interpuncts'
sketch # interpunct
include : DotAt Middle symbolMid (PeriodRadius - O)
save 'period.mid'
@ -952,9 +1007,10 @@ glyph-block Symbol-Punctuation : begin
DotAt MosaicMiddle symbolMid (radius - O - s)
save [MangleName 'whiteBullet'] [MangleUnicode 0x25E6]
glyph-block Symbol-Punctuation-Quotes-And-Primes : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
do 'Quotes and Primes'
local quoteTop (CAP * 1.05)
local quoteBottom (XH * 0.85)
@ -1097,7 +1153,10 @@ glyph-block Symbol-Punctuation : begin
curl (Middle + d - wide) quoteBottom [widths.heading fine fine Downward]
save 'revtripleprime' 0x2037
do 'guillemet'
glyph-block Symbol-Punctuation-Guillemet : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
sketch # singleGuillemetLeft
local top : mix symbolMid parenTop 0.5
local bot : mix symbolMid parenBot 0.5
@ -1138,8 +1197,10 @@ glyph-block Symbol-Punctuation : begin
include : FlipAround Middle symbolMid
save 'guillemetRight' 0xBB
glyph-block Symbol-Punctuation-Daggers : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
do 'Daggers'
sketch # dagger
include : HBar SB RightSB [mix parenTop parenBot 0.33]
include : VBar Middle parenBot parenTop
@ -1151,12 +1212,15 @@ glyph-block Symbol-Punctuation : begin
include : HBar SB RightSB [mix parenTop parenBot 0.67]
save 'doubledagger' 0x2021
do "Ellipsis"
define [DotRadius darkness space] : begin
glyph-block Symbol-Punctuation-Ellipsis : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
define [EllipsisDotRadius darkness space] : begin
return : 0.5 * [adviceBlackness darkness (space / Width)] * PeriodSize / Stroke
define [VerticalThreeDotsShape x bottom top] : glyph-construction
local radius : DotRadius 5 (top - bottom)
local radius : EllipsisDotRadius 5 (top - bottom)
local mid : mix bottom top 0.5
include : DotAt x (bottom + radius) (radius - O)
include : DotAt x mid (radius - O)
@ -1165,13 +1229,13 @@ glyph-block Symbol-Punctuation : begin
for-width-kinds WideWidth1 "Ellipsis"
sketch # onedotLeader
set-width MosaicWidth
local radius : DotRadius 3.5 MosaicWidth
local radius : EllipsisDotRadius 3.5 MosaicWidth
include : DotAt (MosaicWidth / 2) radius (radius - O)
save [MangleName 'onedotLeader'] [MangleUnicode 0x2024]
sketch # twodotsLEader
set-width MosaicWidth
local radius : DotRadius 3.5 MosaicWidth
local radius : EllipsisDotRadius 3.5 MosaicWidth
local left : mix 0 MosaicWidth (1 / 4)
local right : mix 0 MosaicWidth (3 / 4)
include : DotAt left radius (radius - O)
@ -1180,7 +1244,7 @@ glyph-block Symbol-Punctuation : begin
sketch # ellipsis
set-width MosaicWidth
local radius : DotRadius 5 MosaicWidth
local radius : EllipsisDotRadius 5 MosaicWidth
local left : mix 0 MosaicWidth (1 / 6)
local right : mix 0 MosaicWidth (5 / 6)
include : DotAt left radius (radius - O)
@ -1202,7 +1266,10 @@ glyph-block Symbol-Punctuation : begin
include : VerticalThreeDotsShape Middle 0 XH
save 'tricolon' 0x205D
do 'Percentages'
glyph-block Symbol-Punctuation-Percentages : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
define [PercentBarCor df sw] : HVContrast / [Math.sqrt (1 - [Math.pow ((df.rightSB - df.leftSB - sw) / (CAP - 0)) 2])]
define [PercentBarShape df sw] : glyph-construction
local cor : PercentBarCor df sw
@ -1353,7 +1420,10 @@ glyph-block Symbol-Punctuation : begin
select-variant 'permille.NWID' 0x2030 (follow -- 'percent')
select-variant 'basepoint.NWID' 0x2031 (follow -- 'percent')
do "ASCII Marks"
glyph-block Symbol-Punctuation-Ascii-Marks : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
local MarkZoom : glyph-construction
apply-transform : Upright
apply-transform : Translate (-Middle) (-XH - Accent)
@ -1377,7 +1447,10 @@ glyph-block Symbol-Punctuation : begin
alias 'mdfStress' 0x2C8 'singleQuote'
turned 'mdfSecondaryStress' 0x2CC 'singleQuote' Middle (XH / 2)
do "Ties"
glyph-block Symbol-Punctuation-Ties : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
sketch
include : dispiro
widths.lhs OperatorStroke
@ -1388,7 +1461,10 @@ glyph-block Symbol-Punctuation : begin
g4 (RightSB - OX) 0
save "undertie" 0x203F
do "Ligation Variants"
glyph-block Symbol-Punctuation-Ligation Variants : begin
glyph-block-import CommonShapes
glyph-block-import Overmarks
define dotLikePunctuations : list
* "colon"
* "colon.mid"
@ -1399,7 +1475,7 @@ glyph-block Symbol-Punctuation : begin
* "question"
* "exclam"
foreach [baseName : items-of dotLikePunctuations] : sketch
foreach [baseName : items-of dotLikePunctuations] : if [query-glyph baseName] : sketch
include [refer-glyph baseName] AS_BASE ALSO_METRICS
save (baseName + ".lig.dMid")
local delta : Math.max 0 : Width / 2 - (XH - PeriodSize) / 2

View file

@ -151,7 +151,7 @@ define-macro glyph-block-import : syntax-rules
LegShape LeftHook HooktopLeftBar CurlyTail HCurlyTail FlatSlashShape determineMixR
hookstart hookend CyrDescender Fork Miniature Thinner Widen FlipAround ScaleAround
Realign ForceUpright Overlay diagCor CreateWaveShape NameUni PointingTo WithDerivatives
WithAIHSerifsMask SNeck]
WithAIHSerifsMask SNeck WithTransform]
Overmarks `[markExtend markHalfStroke markStress markFine markMiddle markDotsRadius
aboveMarkTop aboveMarkBot aboveMarkMid belowMarkBot belowMarkTop commaOvershoot

View file

@ -583,6 +583,17 @@ sampler = '#'
description = 'Number sign with slanted bars'
numbersign = 'slanted'
[simple.v-ampersand-closed]
tag = 'VXAG'
sampler = '&'
description = 'Ampersand (`&`) with a closed contour'
ampersand = 'closed'
[simple.v-ampersand-open]
tag = 'VXAH'
sampler = '&'
description = 'Ampersand (`&`) with an open contour'
ampersand = 'open'
[simple.v-at-threefold]
tag = 'cv31'
@ -717,7 +728,8 @@ design = [
'v-capital-g-tooth',
'v-lambda-straight',
'v-nine-closed-contour',
'v-six-open-contour'
'v-six-open-contour',
'v-ampersand-closed'
]
upright = [
'v-a-doublestorey',