Skip to content

Commit

Permalink
Fix incorrect slope of Circled Italic Latin Capital Letter C (`U+1F12…
Browse files Browse the repository at this point in the history
…B`) and Circled Italic Latin Capital Letter R (`U+1F12C`) (#1051).
  • Loading branch information
be5invis committed May 24, 2021
1 parent cb14875 commit 9ec5681
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 50 deletions.
3 changes: 2 additions & 1 deletion changes/7.0.0-preview.5.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@
* Fix missing serifs on capital Greek lunate sigmas (#1046).
* Make `cv15` able to influence P with Hook (`U+01A4`) and Ruble sign (`U+20BD`) (#1047).
* Make `cv17` able to influence Yr (`U+01A6`) and R-roundta (`U+A75A`, `U+A75B`) (#1049).
* Correct width of Latin Small Letter UE (`U+1D6B`) (Regression, #1050).
* Correct width of Latin Small Letter UE (`U+1D6B`) (Regression, #1050).
* Fix incorrect slope of Circled Italic Latin Capital Letter C (`U+1F12B`) and Circled Italic Latin Capital Letter R (`U+1F12C`) (#1051).
59 changes: 29 additions & 30 deletions font-src/glyphs/auto-build/composite.ptl
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ define CENTERED true
define NOT-CENTERED false
define ALLOW-PROPORTIONAL true
define MONOSPACE-ONLY false
define SLOPE-INHERIT nothing
define StandardSpacing nothing

glyph-block Autobuild-Enclosure-Shared : begin
glyph-block-import CommonShapes
Expand Down Expand Up @@ -111,7 +111,7 @@ glyph-block Autobuild-Enclosure-Shared : begin
glyph-block AutoBuild-Enclosure : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Recursive-Build : Miniature
glyph-block-import Recursive-Build : Fork Miniature MiniatureParaT
glyph-block-import Autobuild-Enclosure-Shared : CircNameNoCheck CircName CollectJobs EnsureComponentGlyphT CreateDerivedFontFromJobs applyRelations getGlyphDefaultShift

define circleWidthClasses {{'NWID' Width 0.12} {'WWID' WideWidth0 0.08}}
Expand All @@ -123,18 +123,18 @@ glyph-block AutoBuild-Enclosure : begin
define subGlyph : miniatureFont.queryByNameEnsured gidPart
define shift : if mp mpShift : getGlyphDefaultShift bal baly subGlyph
define shiftPartName : if mp "mp\(shift)" "sp"
define gniPart : '.ci.' + gidPart + '@' + [{ dscale xCompress shiftPartName yCompress kExtraYShift }.join '/']
define gniPart : '.ci.' + gidPart + '@' + [{ dscale xCompress shiftPartName yCompress kExtraYShift [subGlyph.gizmo.toString] }.join '/']
if [not : query-glyph gniPart] : begin
enclosureInnerPartActualWidth.set gniPart (subGlyph.advanceWidth * dscale * xCompress)
create-glyph gniPart : glyph-proc
set-width 0
include subGlyph
include : Upright
include : subGlyph.gizmo.inverse
include : Scale (dscale * xCompress) (dscale * yCompress)
include : Translate 0 (dscale * (-CAP / 2 + shift))
include : Translate 0 (CAP / 2 * dscale)
include : Translate 0 (SymbolMid + (kExtraYShift - 0.5) * CAP * dscale)
include : Italify
include subGlyph.gizmo
if mp
: then : set-mark-anchor markClass 0 0 (subGlyph.advanceWidth * dscale * xCompress) 0
: else : set-mark-anchor markClass (subGlyph.advanceWidth * dscale * xCompress / 2) 0
Expand Down Expand Up @@ -227,17 +227,20 @@ glyph-block AutoBuild-Enclosure : begin
define smoothB : SmoothBOf (SmallSmooth * (right - left) / (RightSB - SB)) width
return : object width mockInnerWidth dscale sw0 sw top bot left right mosaicTop mosaicBot mosaicLeft mosaicRight smoothA smoothB

define [CircledMiniatureFont slopeAngle digits rows width] : lambda [gs] : Miniature
glyphs -- gs
define [StandardSpacing pp digits rows width] : MiniatureParaT pp
crowd -- [CircCrowd (digits / rows) width]
scale -- [CircScale (digits / rows) width]
sbscale -- 1
slopeAngle -- [fallback slopeAngle para.slopeAngle]

define [EnclosureT prefix builder slopeAngle digits rows demands fnEnclosure] : begin
define [ItalicSpacing pp digits rows width] : begin
define pp1 : pp.reinit : function [a] : set a.shape.slope 'italic'
return : StandardSpacing pp1 digits rows width

define [EnclosureT prefix builder spacing digits rows demands fnEnclosure] : begin
foreach {suffix ww gap} [items-of circleWidthClasses] : do
define jobs : CollectJobs builder.decomposable CENTERED ALLOW-PROPORTIONAL (prefix + digits) suffix demands
define miniatureFont : CreateDerivedFontFromJobs jobs {} : CircledMiniatureFont slopeAngle digits rows ww
define forkedPara : spacing para digits rows ww
define miniatureFont : CreateDerivedFontFromJobs jobs {} : function [gs] : Fork gs forkedPara
define gnEnclosure : CircName null (prefix + digits + '.enclosure') {} suffix
if [not : query-glyph gnEnclosure] : create-glyph gnEnclosure : fnEnclosure digits ww gap
foreach job [items-of jobs.decomposableJobs] : begin
Expand Down Expand Up @@ -294,17 +297,17 @@ glyph-block AutoBuild-Enclosure : begin
set-base-anchor 'enclosureInnerSecondHalf' (0.5 * width - 0.5 * dscale * [Math.min (Width * digits) mockInnerWidth]) 0

define [createCircledGlyphs digits demands]
EnclosureT "circle" CircledBuilder SLOPE-INHERIT digits 1 demands CircleEnclosureShape
EnclosureT "circle" CircledBuilder StandardSpacing digits 1 demands CircleEnclosureShape
define [createItalicCircledGlyphs digits demands]
EnclosureT "circle-italic" CircledBuilder para.derivedSlopeAngle digits 1 demands CircleEnclosureShape
EnclosureT "circle-italic" CircledBuilder ItalicSpacing digits 1 demands CircleEnclosureShape
define [CircleEnclosureShape digits ww gap] : glyph-proc
define [object width sw top bot left right smoothA smoothB] : circleDimens digits ww
set-width width
include : OShape top bot left right sw smoothA smoothB
include : AddEnclosureMark digits : circleDimens digits ww

define [createBoxedGlyphs digits demands]
EnclosureT 'boxed' CircledBuilder SLOPE-INHERIT digits 1 demands BoxEnclosureShape
EnclosureT 'boxed' CircledBuilder StandardSpacing digits 1 demands BoxEnclosureShape
define [BoxEnclosureShape digits ww gap] : glyph-proc
define [object width mockInnerWidth sw top bot left right] : circleDimens digits ww
set-width width
Expand All @@ -316,7 +319,7 @@ glyph-block AutoBuild-Enclosure : begin
include : AddEnclosureMark digits : circleDimens digits ww

define [createTwoRowBoxedGlyphs digits demands]
EnclosureT 'twoRowBoxed' TwoRowBoxedBuilder SLOPE-INHERIT digits 2 demands TwoRowBoxEnclosureShape
EnclosureT 'twoRowBoxed' TwoRowBoxedBuilder StandardSpacing digits 2 demands TwoRowBoxEnclosureShape
define [TwoRowBoxEnclosureShape digits ww gap] : glyph-proc
define [object width mockInnerWidth sw top bot left right] : circleDimens digits ww
set-width width
Expand All @@ -328,7 +331,7 @@ glyph-block AutoBuild-Enclosure : begin
include : AddEnclosureMarkTwoLine digits : circleDimens digits ww

define [createDashedBoxedGlyphs digits demands]
EnclosureT 'dashed-boxed' CircledBuilder SLOPE-INHERIT digits 1 demands DashedBoxEnclosureShape
EnclosureT 'dashed-boxed' CircledBuilder StandardSpacing digits 1 demands DashedBoxEnclosureShape
define [DashedBoxEnclosureShape digits ww cap] : glyph-proc
define [object width mockInnerWidth sw top bot left right] : circleDimens digits ww
set-width width
Expand All @@ -348,15 +351,15 @@ glyph-block AutoBuild-Enclosure : begin
include : AddEnclosureMark digits : circleDimens digits ww

define [createInsetCircledGlyphs digits demands]
EnclosureT 'inset-circle' InsetBuilder SLOPE-INHERIT digits 1 demands InsetCircleEnclosureShape
EnclosureT 'inset-circle' InsetBuilder StandardSpacing digits 1 demands InsetCircleEnclosureShape
define [InsetCircleEnclosureShape digits ww gap] : glyph-proc
define [object width sw top bot left right smoothA smoothB] : circleDimens digits ww
set-width width
include : OShapeOutline top bot left right sw smoothA smoothB
include : AddEnclosureMark digits : circleDimens digits ww

define [createInsetBoxedGlyphs digits demands]
EnclosureT 'inset-boxed' InsetBuilder SLOPE-INHERIT digits 1 demands InsetBoxEnclosureShape
EnclosureT 'inset-boxed' InsetBuilder StandardSpacing digits 1 demands InsetBoxEnclosureShape
define [InsetBoxEnclosureShape digits ww gap] : glyph-proc
define [object width top bot left right] : circleDimens digits ww
set-width width
Expand All @@ -369,7 +372,7 @@ glyph-block AutoBuild-Enclosure : begin
include : AddEnclosureMark digits : circleDimens digits ww

define [createInsetDiamondGlyphs digits demands]
EnclosureT 'inset-diamond' InsetBuilder SLOPE-INHERIT digits 1 demands InsetDiamondEnclosureShape
EnclosureT 'inset-diamond' InsetBuilder StandardSpacing digits 1 demands InsetDiamondEnclosureShape
define [InsetDiamondEnclosureShape digits ww gap] : glyph-proc
define [object width top bot left right] : circleDimens digits ww
set-width width
Expand All @@ -382,7 +385,7 @@ glyph-block AutoBuild-Enclosure : begin
include : AddEnclosureMark digits : circleDimens digits ww

define [createInsetMosaicGlyphs digits demands]
EnclosureT 'inset-mosaic' InsetBuilder SLOPE-INHERIT digits 1 demands InsetMosaicEnclosureShape
EnclosureT 'inset-mosaic' InsetBuilder StandardSpacing digits 1 demands InsetMosaicEnclosureShape
define [InsetMosaicEnclosureShape digits ww gap] : glyph-proc
define [object width mockInnerWidth mosaicTop mosaicBot mosaicLeft mosaicRight] : circleDimens digits ww
set-width width
Expand All @@ -396,7 +399,7 @@ glyph-block AutoBuild-Enclosure : begin
include : AddEnclosureMark digits : circleDimens digits ww

define [createDoubleCircledGlyphs digits demands]
EnclosureT 'double-circle' CircledBuilder SLOPE-INHERIT digits 1 demands DoubleCircledEnclosureShape
EnclosureT 'double-circle' CircledBuilder StandardSpacing digits 1 demands DoubleCircledEnclosureShape
define [DoubleCircledEnclosureShape digits ww gap] : glyph-proc
define [object width mockInnerWidth sw0 sw top bot left right smoothA smoothB] : circleDimens digits ww (ww * gap)
set-width width
Expand Down Expand Up @@ -427,8 +430,7 @@ glyph-block AutoBuild-Enclosure : begin
define [BracedT rawPrefix digits demands fnBraceShape] : foreach {suffix ww} [items-of circleWidthClasses] : do
define prefix : rawPrefix + digits
define jobs : CollectJobs DECOMPOSABLE CENTERED ALLOW-PROPORTIONAL prefix suffix demands
define miniatureFont : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Miniature
glyphs -- gs
define miniatureFont : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Miniature gs
crowd -- [BraceCrowd digits ww]
scale -- [BraceScale digits ww]
sbscale -- 1
Expand Down Expand Up @@ -520,8 +522,7 @@ glyph-block AutoBuild-Enclosure : begin
foreach {suffix ww} [items-of circleWidthClasses] : do
define jobs : CollectJobs DECOMPOSABLE NOT-CENTERED ALLOW-PROPORTIONAL ('dotted' + digits) suffix demands

local miniatureFont : CreateDerivedFontFromJobs jobs {gidDot} : lambda [gs]: Miniature
glyphs -- gs
local miniatureFont : CreateDerivedFontFromJobs jobs {gidDot} : lambda [gs]: Miniature gs
crowd -- [DottedCrowd digits ww]
scale -- [DottedScale digits ww]
sbscale -- 1
Expand Down Expand Up @@ -806,8 +807,7 @@ glyph-block Autobuild-Fractions : begin

define [createFracImpl prefix demands fine scaleFactor closing] : begin
local jobs : CollectJobs DECOMPOSABLE NOT-CENTERED ALLOW-PROPORTIONAL prefix '' demands
define miniatureFont : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Miniature
glyphs -- gs
define miniatureFont : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Miniature gs
crowd -- 3.5
scale -- (scaleFactor + 0.05)

Expand Down Expand Up @@ -918,8 +918,7 @@ glyph-block AutoBuild-Accented-Equal : begin
define [createAccentedOp gnBase crowd scale shiftX shiftY demands] : begin
define prefix : 'accent-op{' + gnBase + '}{' + [{crowd scale shiftX shiftY}.join '-'] + '}'
local jobs : CollectJobs DECOMPOSABLE NOT-CENTERED MONOSPACE-ONLY prefix '' demands
local dFont : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Miniature
glyphs -- gs
local dFont : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Miniature gs
crowd -- crowd
scale -- scale
mono -- true
Expand Down Expand Up @@ -1031,7 +1030,7 @@ glyph-block AutoBuild-Accented-Equal : begin
glyph-block Autobuild-Ligatures : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Recursive-Build : Miniature Thinner
glyph-block-import Recursive-Build : Thinner
glyph-block-import Autobuild-Enclosure-Shared : CollectJobs CreateDerivedFontFromJobs EnsureComponentGlyphT applyRelations

define [createLigatures prefix _shrink1 _shrink2 wadj1 wadj2 demands] : for-width-kinds WideWidth2
Expand Down Expand Up @@ -1137,7 +1136,7 @@ glyph-block Autobuild-Ligatures : begin
glyph-block Autobuild-Pnonetic-Ligatures : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Recursive-Build : Miniature Thinner
glyph-block-import Recursive-Build : Thinner
glyph-block-import Autobuild-Enclosure-Shared : CollectJobs CreateDerivedFontFromJobs EnsureComponentGlyphT applyRelations

define [createPhoneticLigatures prefix div _shrink1 _shrink2 wadj1 wadj2 demands] : begin
Expand Down
17 changes: 6 additions & 11 deletions font-src/glyphs/auto-build/transformed.ptl
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,7 @@ glyph-block Autobuild-Transformed : begin
define [createSuperscripts _records] : begin
local {records relSets targetNameMap} : extendRelatedGlyphs 'sup' _records
local pendingGlyphs : records.map : [record] => record.1
local miniatureFont : Miniature
glyphs -- pendingGlyphs
local miniatureFont : Miniature pendingGlyphs
crowd -- 3.5
scale -- 0.7
mono -- true
Expand All @@ -100,8 +99,7 @@ glyph-block Autobuild-Transformed : begin
define [createSubscripts _records] : begin
local {records relSets targetNameMap} : extendRelatedGlyphs 'sub' _records
local pendingGlyphs : records.map : [record] => record.1
local miniatureFont : Miniature
glyphs -- pendingGlyphs
local miniatureFont : Miniature pendingGlyphs
crowd -- 3.5
scale -- 0.7
mono -- true
Expand Down Expand Up @@ -141,8 +139,7 @@ glyph-block Autobuild-Transformed : begin
define [createMedievalCombs defaultLow defaultHigh _records] : begin
local { records relSets targetNameMap } : extendRelatedGlyphs 'medievalAbove' _records
local pendingGlyphs : records.map : [record] => record.1
local miniatureFont : Miniature
glyphs -- pendingGlyphs
local miniatureFont : Miniature pendingGlyphs
crowd -- 7
scale -- 0.4
mono -- true
Expand Down Expand Up @@ -174,8 +171,7 @@ glyph-block Autobuild-Transformed : begin
define [createMedievalBelowCombs _records] : begin
local { records relSets targetNameMap } : extendRelatedGlyphs 'medievalBelow' _records
local pendingGlyphs : records.map : [record] => record.1
local miniatureFont : Miniature
glyphs -- pendingGlyphs
local miniatureFont : Miniature pendingGlyphs
crowd -- 7
scale -- 0.4
mono -- true
Expand Down Expand Up @@ -479,7 +475,7 @@ glyph-block Autobuild-Transformed : begin
glyph-block Autobuild-Transformed-Mathematical : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Recursive-Build : Fork Miniature
glyph-block-import Recursive-Build : Fork
glyph-block-import Autobuild-Transformed-Shared : extendRelatedGlyphs link-relations wrapName

define [createMathDerivedSeriesImpl groupName tfm _records] : begin
Expand Down Expand Up @@ -621,8 +617,7 @@ glyph-block Autobuild-Rotated : begin

for-width-kinds WideWidth1 : do
local s : (RightSB - SB - O * 4 + (MosaicWidth - Width) * 0.5) / CAP
local df : Miniature
glyphs -- {'eight.lnum.crossing' 'rotetedPropto' 'revS'}
local df : Miniature {'eight.lnum.crossing' 'rotetedPropto' 'revS'}
crowd -- 4
scale -- s
slopeAngle -- 0
Expand Down
19 changes: 11 additions & 8 deletions font-src/glyphs/common/derivatives.ptl
Original file line number Diff line number Diff line change
Expand Up @@ -181,21 +181,24 @@ glyph-block Recursive-Build : begin
local gs : buildGlyphs p shouldBuildList shouldBuildUnicodes
return gs.glyphStore

define [Miniature] : params [glyphs crowd scale [slopeAngle para.slopeAngle] [sbscale (Width / UPM)] [mono false] [mono2 false]] : begin
local forkedPara : Object.create para
define [MiniatureParaT] : params [pp crowd scale [sbscale (Width / UPM)] [mono false] [mono2 false]] : begin
local forkedPara : Object.create pp
forkedPara.stroke = [AdviceStroke crowd : Math.pow [clamp 0 1 (HalfUPM / Width)] 0.5] / scale
forkedPara.ess = para.ess * forkedPara.stroke / para.stroke
forkedPara.dotsize = para.dotsize * forkedPara.stroke / para.stroke
forkedPara.periodsize = para.periodsize * forkedPara.stroke / para.stroke
forkedPara.ess = pp.ess * forkedPara.stroke / pp.stroke
forkedPara.dotsize = pp.dotsize * forkedPara.stroke / pp.stroke
forkedPara.periodsize = pp.periodsize * forkedPara.stroke / pp.stroke
forkedPara.sb = SB * sbscale
forkedPara.slopeAngle = slopeAngle
if mono : begin
forkedPara.diversityM = 1
if mono2 : begin
forkedPara.diversityF = 1
forkedPara.diversityI = 1
forkedPara.diversityII = 1
return : Fork glyphs forkedPara

return forkedPara

define [Miniature glyphs] : begin
return : Fork glyphs : MiniatureParaT.apply null { para :: [{}.slice.call arguments 1] }

define [Thinner glyphs p fMono] : begin
local forkedPara : Object.create para
Expand Down Expand Up @@ -223,4 +226,4 @@ glyph-block Recursive-Build : begin
forkedPara.hookx = HookX * p
return : Fork glyphs forkedPara

glyph-block-export Fork Miniature Thinner Widen
glyph-block-export Fork Miniature MiniatureParaT Thinner Widen
4 changes: 4 additions & 0 deletions font-src/support/transform.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ module.exports = class Transform {
);
}

toString() {
return `[[${this.xx} ${this.xy}] [${this.yx} ${this.yy}]] + [[${this.x}] [${this.y}]]`;
}

static isTranslate(tfm) {
return tfm.xx === 1 && tfm.yy === 1 && tfm.xy === 0 && tfm.yx === 0;
}
Expand Down

0 comments on commit 9ec5681

Please sign in to comment.